1 // Copyright 2013 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #ifndef CHROME_UTILITY_MEDIA_GALLERIES_MEDIA_METADATA_PARSER_H_ 6 #define CHROME_UTILITY_MEDIA_GALLERIES_MEDIA_METADATA_PARSER_H_ 7 8 #include <string> 9 #include <vector> 10 11 #include "base/callback.h" 12 #include "base/memory/scoped_ptr.h" 13 #include "chrome/common/extensions/api/media_galleries.h" 14 #include "chrome/common/media_galleries/metadata_types.h" 15 16 namespace base { 17 class Thread; 18 } 19 20 namespace media { 21 class DataSource; 22 } 23 24 namespace metadata { 25 26 // This class takes a MIME type and data source and parses its metadata. It 27 // handles audio, video, and images. It delegates its operations to FFMPEG, 28 // libexif, etc. This class lives and operates on the utility thread of the 29 // utility process, as we wish to sandbox potentially dangerous operations 30 // on user-provided data. 31 class MediaMetadataParser { 32 public: 33 typedef extensions::api::media_galleries::MediaMetadata MediaMetadata; 34 typedef base::Callback< 35 void(const MediaMetadata& metadata, 36 const std::vector<AttachedImage>& attached_images)> 37 MetadataCallback; 38 39 // Does not take ownership of |source|. Caller is responsible for ensuring 40 // that |source| outlives this object. 41 MediaMetadataParser(media::DataSource* source, const std::string& mime_type, 42 bool get_attached_images); 43 44 ~MediaMetadataParser(); 45 46 // |callback| is called on same message loop. 47 void Start(const MetadataCallback& callback); 48 49 private: 50 // Only accessed on |media_thread_| from this class. 51 media::DataSource* const source_; 52 53 const std::string mime_type_; 54 55 bool get_attached_images_; 56 57 // Thread that blocking media parsing operations run on while the main thread 58 // handles messages from the browser process. 59 // TODO(tommycli): Replace with a reference to a WorkerPool if we ever use 60 // this class in batch mode. 61 scoped_ptr<base::Thread> media_thread_; 62 63 DISALLOW_COPY_AND_ASSIGN(MediaMetadataParser); 64 }; 65 66 } // namespace metadata 67 68 #endif // CHROME_UTILITY_MEDIA_GALLERIES_MEDIA_METADATA_PARSER_H_ 69