Home | History | Annotate | Download | only in login
      1 // Copyright (c) 2011 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_BROWSER_CHROMEOS_LOGIN_IMAGE_DECODER_H_
      6 #define CHROME_BROWSER_CHROMEOS_LOGIN_IMAGE_DECODER_H_
      7 #pragma once
      8 
      9 #include <string>
     10 #include <vector>
     11 
     12 #include "chrome/browser/utility_process_host.h"
     13 
     14 namespace chromeos {
     15 
     16 // Decodes an image in a sandboxed process.
     17 class ImageDecoder : public UtilityProcessHost::Client {
     18  public:
     19   class Delegate {
     20    public:
     21     // Called when image is decoded.
     22     // |decoder| is used to identify the image in case of decoding several
     23     // images simultaneously.
     24     virtual void OnImageDecoded(const ImageDecoder* decoder,
     25                                 const SkBitmap& decoded_image) = 0;
     26 
     27     // Called when decoding image failed. Delegate can do some cleanup in
     28     // this handler.
     29     virtual void OnDecodeImageFailed(const ImageDecoder* decoder) {}
     30 
     31    protected:
     32     virtual ~Delegate() {}
     33   };
     34 
     35   ImageDecoder(Delegate* delegate,
     36                const std::string& image_data);
     37 
     38   // Starts image decoding.
     39   void Start();
     40 
     41  private:
     42   // It's a reference counted object, so destructor is private.
     43   virtual ~ImageDecoder() {}
     44 
     45   // Overidden from UtilityProcessHost::Client:
     46   virtual void OnDecodeImageSucceeded(const SkBitmap& decoded_image);
     47   virtual void OnDecodeImageFailed();
     48 
     49   // Launches sandboxed process that will decode the image.
     50   void DecodeImageInSandbox(const std::vector<unsigned char>& image_data);
     51 
     52   Delegate* delegate_;
     53   std::vector<unsigned char> image_data_;
     54   BrowserThread::ID target_thread_id_;
     55 
     56   DISALLOW_COPY_AND_ASSIGN(ImageDecoder);
     57 };
     58 
     59 }  // namespace chromeos
     60 
     61 #endif  // CHROME_BROWSER_CHROMEOS_LOGIN_IMAGE_DECODER_H_
     62