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.
21class 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