Home | History | Annotate | Download | only in extensions
      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_BROWSER_CHROMEOS_EXTENSIONS_WALLPAPER_API_H_
      6 #define CHROME_BROWSER_CHROMEOS_EXTENSIONS_WALLPAPER_API_H_
      7 
      8 #include "base/threading/sequenced_worker_pool.h"
      9 #include "chrome/browser/chromeos/extensions/wallpaper_function_base.h"
     10 #include "chrome/common/extensions/api/wallpaper.h"
     11 #include "net/url_request/url_request_status.h"
     12 
     13 // Implementation of chrome.wallpaper.setWallpaper API.
     14 // After this API being called, a jpeg encoded wallpaper will be saved to
     15 // /home/chronos/custom_wallpaper/{resolution}/{user_id_hash}/file_name. The
     16 // wallpaper can then persistent after Chrome restart. New call to this API
     17 // will replace the previous saved wallpaper with new one.
     18 // Note: For security reason, the original encoded wallpaper image is not saved
     19 // directly. It is decoded and re-encoded to jpeg format before saved to file
     20 // system.
     21 class WallpaperSetWallpaperFunction : public WallpaperFunctionBase {
     22  public:
     23   DECLARE_EXTENSION_FUNCTION("wallpaper.setWallpaper",
     24                              WALLPAPER_SETWALLPAPER)
     25 
     26   WallpaperSetWallpaperFunction();
     27 
     28  protected:
     29   virtual ~WallpaperSetWallpaperFunction();
     30 
     31   // AsyncExtensionFunction overrides.
     32   virtual bool RunAsync() OVERRIDE;
     33 
     34  private:
     35   virtual void OnWallpaperDecoded(const gfx::ImageSkia& image) OVERRIDE;
     36 
     37   // Generates thumbnail of custom wallpaper. A simple STRETCH is used for
     38   // generating thumbnail.
     39   void GenerateThumbnail(const base::FilePath& thumbnail_path,
     40                          scoped_ptr<gfx::ImageSkia> image);
     41 
     42   // Thumbnail is ready. Calls api function javascript callback.
     43   void ThumbnailGenerated(base::RefCountedBytes* data);
     44 
     45   // Called by OnURLFetchComplete().
     46   void OnWallpaperFetched(bool success, const std::string& response);
     47 
     48   scoped_ptr<extensions::api::wallpaper::SetWallpaper::Params> params_;
     49 
     50   // Unique file name of the custom wallpaper.
     51   std::string file_name_;
     52 
     53   // User id of the user who initiate this API call.
     54   std::string user_id_;
     55 
     56   // User id hash of the logged in user.
     57   std::string user_id_hash_;
     58 
     59   // Sequence token associated with wallpaper operations. Shared with
     60   // WallpaperManager.
     61   base::SequencedWorkerPool::SequenceToken sequence_token_;
     62 };
     63 
     64 #endif  // CHROME_BROWSER_CHROMEOS_EXTENSIONS_WALLPAPER_API_H_
     65 
     66