Home | History | Annotate | Download | only in media_galleries
      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