Upstream version 5.34.92.0
[platform/framework/web/crosswalk.git] / src / chrome / browser / chromeos / extensions / wallpaper_api.h
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 RunImpl() OVERRIDE;
33
34  private:
35   virtual void OnWallpaperDecoded(const gfx::ImageSkia& wallpaper) 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(net::URLRequestStatus::Status status,
47                           const std::string& response);
48
49   scoped_ptr<extensions::api::wallpaper::SetWallpaper::Params> params_;
50
51   // Unique file name of the custom wallpaper.
52   std::string file_name_;
53
54   // Email address of logged in user.
55   std::string email_;
56
57   // User id hash of the logged in user.
58   std::string user_id_hash_;
59
60   // Sequence token associated with wallpaper operations. Shared with
61   // WallpaperManager.
62   base::SequencedWorkerPool::SequenceToken sequence_token_;
63 };
64
65 #endif  // CHROME_BROWSER_CHROMEOS_EXTENSIONS_WALLPAPER_API_H_
66