| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "chrome/browser/media_galleries/fileapi/safe_media_metadata_parser.h" | 5 #include "chrome/browser/media_galleries/fileapi/safe_media_metadata_parser.h" |
| 6 | 6 |
| 7 #include <utility> | 7 #include <utility> |
| 8 | 8 |
| 9 #include "base/memory/ptr_util.h" | 9 #include "base/memory/ptr_util.h" |
| 10 #include "chrome/browser/extensions/blob_reader.h" | 10 #include "chrome/browser/extensions/blob_reader.h" |
| (...skipping 11 matching lines...) Expand all Loading... |
| 22 extensions::mojom::MediaDataSourcePtr* interface) | 22 extensions::mojom::MediaDataSourcePtr* interface) |
| 23 : binding_(this, interface), safe_media_metadata_parser_(owner) { | 23 : binding_(this, interface), safe_media_metadata_parser_(owner) { |
| 24 DCHECK_CURRENTLY_ON(content::BrowserThread::IO); | 24 DCHECK_CURRENTLY_ON(content::BrowserThread::IO); |
| 25 } | 25 } |
| 26 | 26 |
| 27 ~MediaDataSourceImpl() override = default; | 27 ~MediaDataSourceImpl() override = default; |
| 28 | 28 |
| 29 private: | 29 private: |
| 30 void ReadBlob(int64_t position, | 30 void ReadBlob(int64_t position, |
| 31 int64_t length, | 31 int64_t length, |
| 32 const ReadBlobCallback& callback) override { | 32 ReadBlobCallback callback) override { |
| 33 safe_media_metadata_parser_->StartBlobRequest(callback, position, length); | 33 safe_media_metadata_parser_->StartBlobRequest(std::move(callback), position, |
| 34 length); |
| 34 } | 35 } |
| 35 | 36 |
| 36 mojo::Binding<extensions::mojom::MediaDataSource> binding_; | 37 mojo::Binding<extensions::mojom::MediaDataSource> binding_; |
| 37 // |safe_media_metadata_parser_| owns |this|. | 38 // |safe_media_metadata_parser_| owns |this|. |
| 38 SafeMediaMetadataParser* const safe_media_metadata_parser_; | 39 SafeMediaMetadataParser* const safe_media_metadata_parser_; |
| 39 | 40 |
| 40 DISALLOW_COPY_AND_ASSIGN(MediaDataSourceImpl); | 41 DISALLOW_COPY_AND_ASSIGN(MediaDataSourceImpl); |
| 41 }; | 42 }; |
| 42 | 43 |
| 43 SafeMediaMetadataParser::SafeMediaMetadataParser(Profile* profile, | 44 SafeMediaMetadataParser::SafeMediaMetadataParser(Profile* profile, |
| (...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 119 base::MakeUnique<std::vector<metadata::AttachedImage>>(attached_images); | 120 base::MakeUnique<std::vector<metadata::AttachedImage>>(attached_images); |
| 120 | 121 |
| 121 content::BrowserThread::PostTask( | 122 content::BrowserThread::PostTask( |
| 122 content::BrowserThread::UI, FROM_HERE, | 123 content::BrowserThread::UI, FROM_HERE, |
| 123 base::BindOnce(callback_, parse_success, | 124 base::BindOnce(callback_, parse_success, |
| 124 base::Passed(&metadata_dictionary), | 125 base::Passed(&metadata_dictionary), |
| 125 base::Passed(&attached_images_copy))); | 126 base::Passed(&attached_images_copy))); |
| 126 } | 127 } |
| 127 | 128 |
| 128 void SafeMediaMetadataParser::StartBlobRequest( | 129 void SafeMediaMetadataParser::StartBlobRequest( |
| 129 const extensions::mojom::MediaDataSource::ReadBlobCallback& callback, | 130 extensions::mojom::MediaDataSource::ReadBlobCallback callback, |
| 130 int64_t position, | 131 int64_t position, |
| 131 int64_t length) { | 132 int64_t length) { |
| 132 DCHECK_CURRENTLY_ON(content::BrowserThread::IO); | 133 DCHECK_CURRENTLY_ON(content::BrowserThread::IO); |
| 133 | 134 |
| 134 content::BrowserThread::PostTask( | 135 content::BrowserThread::PostTask( |
| 135 content::BrowserThread::UI, FROM_HERE, | 136 content::BrowserThread::UI, FROM_HERE, |
| 136 base::BindOnce(&SafeMediaMetadataParser::StartBlobReaderOnUIThread, this, | 137 base::BindOnce(&SafeMediaMetadataParser::StartBlobReaderOnUIThread, this, |
| 137 callback, position, length)); | 138 std::move(callback), position, length)); |
| 138 } | 139 } |
| 139 | 140 |
| 140 void SafeMediaMetadataParser::StartBlobReaderOnUIThread( | 141 void SafeMediaMetadataParser::StartBlobReaderOnUIThread( |
| 141 const extensions::mojom::MediaDataSource::ReadBlobCallback& callback, | 142 extensions::mojom::MediaDataSource::ReadBlobCallback callback, |
| 142 int64_t position, | 143 int64_t position, |
| 143 int64_t length) { | 144 int64_t length) { |
| 144 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); | 145 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); |
| 145 | 146 |
| 146 BlobReader* reader = new BlobReader( // BlobReader is self-deleting. | 147 BlobReader* reader = new BlobReader( // BlobReader is self-deleting. |
| 147 profile_, blob_uuid_, | 148 profile_, blob_uuid_, |
| 148 base::Bind(&SafeMediaMetadataParser::BlobReaderDoneOnUIThread, this, | 149 base::Bind(&SafeMediaMetadataParser::BlobReaderDoneOnUIThread, this, |
| 149 callback)); | 150 base::Passed(&callback))); |
| 150 reader->SetByteRange(position, length); | 151 reader->SetByteRange(position, length); |
| 151 reader->Start(); | 152 reader->Start(); |
| 152 } | 153 } |
| 153 | 154 |
| 154 void SafeMediaMetadataParser::BlobReaderDoneOnUIThread( | 155 void SafeMediaMetadataParser::BlobReaderDoneOnUIThread( |
| 155 const extensions::mojom::MediaDataSource::ReadBlobCallback& callback, | 156 extensions::mojom::MediaDataSource::ReadBlobCallback callback, |
| 156 std::unique_ptr<std::string> data, | 157 std::unique_ptr<std::string> data, |
| 157 int64_t /* blob_total_size */) { | 158 int64_t /* blob_total_size */) { |
| 158 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); | 159 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); |
| 159 | 160 |
| 160 content::BrowserThread::PostTask( | 161 content::BrowserThread::PostTask( |
| 161 content::BrowserThread::IO, FROM_HERE, | 162 content::BrowserThread::IO, FROM_HERE, |
| 162 base::BindOnce(&SafeMediaMetadataParser::FinishBlobRequest, this, | 163 base::BindOnce(&SafeMediaMetadataParser::FinishBlobRequest, this, |
| 163 callback, base::Passed(std::move(data)))); | 164 std::move(callback), std::move(data))); |
| 164 } | 165 } |
| 165 | 166 |
| 166 void SafeMediaMetadataParser::FinishBlobRequest( | 167 void SafeMediaMetadataParser::FinishBlobRequest( |
| 167 const extensions::mojom::MediaDataSource::ReadBlobCallback& callback, | 168 extensions::mojom::MediaDataSource::ReadBlobCallback callback, |
| 168 std::unique_ptr<std::string> data) { | 169 std::unique_ptr<std::string> data) { |
| 169 DCHECK_CURRENTLY_ON(content::BrowserThread::IO); | 170 DCHECK_CURRENTLY_ON(content::BrowserThread::IO); |
| 170 | 171 |
| 171 if (utility_process_mojo_client_) | 172 if (utility_process_mojo_client_) |
| 172 callback.Run(std::vector<uint8_t>(data->begin(), data->end())); | 173 std::move(callback).Run(std::vector<uint8_t>(data->begin(), data->end())); |
| 173 } | 174 } |
| 174 | 175 |
| 175 } // namespace metadata | 176 } // namespace metadata |
| OLD | NEW |