// Copyright (c) 2012 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef CHROME_BROWSER_CHROMEOS_EXTENSIONS_WALLPAPER_PRIVATE_API_H_ #define CHROME_BROWSER_CHROMEOS_EXTENSIONS_WALLPAPER_PRIVATE_API_H_ #include "base/threading/sequenced_worker_pool.h" #include "chrome/browser/chromeos/extensions/wallpaper_function_base.h" #include "chrome/common/extensions/api/wallpaper_private.h" #include "net/url_request/url_fetcher_delegate.h" namespace chromeos { class UserImage; } // namespace chromeos // Wallpaper manager strings. class WallpaperPrivateGetStringsFunction : public SyncExtensionFunction { public: DECLARE_EXTENSION_FUNCTION("wallpaperPrivate.getStrings", WALLPAPERPRIVATE_GETSTRINGS) protected: virtual ~WallpaperPrivateGetStringsFunction() {} // SyncExtensionFunction overrides. virtual bool RunSync() override; }; // Check if sync themes setting is enabled. class WallpaperPrivateGetSyncSettingFunction : public SyncExtensionFunction { public: DECLARE_EXTENSION_FUNCTION("wallpaperPrivate.getSyncSetting", WALLPAPERPRIVATE_GETSYNCSETTING) protected: virtual ~WallpaperPrivateGetSyncSettingFunction() {} // SyncExtensionFunction overrides. virtual bool RunSync() override; }; class WallpaperPrivateSetWallpaperIfExistsFunction : public WallpaperFunctionBase { public: DECLARE_EXTENSION_FUNCTION("wallpaperPrivate.setWallpaperIfExists", WALLPAPERPRIVATE_SETWALLPAPERIFEXISTS) WallpaperPrivateSetWallpaperIfExistsFunction(); protected: virtual ~WallpaperPrivateSetWallpaperIfExistsFunction(); // AsyncExtensionFunction overrides. virtual bool RunAsync() override; private: virtual void OnWallpaperDecoded(const gfx::ImageSkia& image) override; // File doesn't exist. Sets javascript callback parameter to false. void OnFileNotExists(const std::string& error); // Reads file specified by |file_path|. If success, post a task to start // decoding the file. void ReadFileAndInitiateStartDecode(const base::FilePath& file_path, const base::FilePath& fallback_path); scoped_ptr params; // User id of the active user when this api is been called. std::string user_id_; // Sequence token associated with wallpaper operations. Shared with // WallpaperManager. base::SequencedWorkerPool::SequenceToken sequence_token_; }; class WallpaperPrivateSetWallpaperFunction : public WallpaperFunctionBase { public: DECLARE_EXTENSION_FUNCTION("wallpaperPrivate.setWallpaper", WALLPAPERPRIVATE_SETWALLPAPER) WallpaperPrivateSetWallpaperFunction(); protected: virtual ~WallpaperPrivateSetWallpaperFunction(); // AsyncExtensionFunction overrides. virtual bool RunAsync() override; private: virtual void OnWallpaperDecoded(const gfx::ImageSkia& image) override; // Saves the image data to a file. void SaveToFile(); // Sets wallpaper to the decoded image. void SetDecodedWallpaper(scoped_ptr image); scoped_ptr params; // The decoded wallpaper. It may accessed from UI thread to set wallpaper or // FILE thread to resize and save wallpaper to disk. gfx::ImageSkia wallpaper_; // User id of the active user when this api is been called. std::string user_id_; // Sequence token associated with wallpaper operations. Shared with // WallpaperManager. base::SequencedWorkerPool::SequenceToken sequence_token_; }; class WallpaperPrivateResetWallpaperFunction : public AsyncExtensionFunction { public: DECLARE_EXTENSION_FUNCTION("wallpaperPrivate.resetWallpaper", WALLPAPERPRIVATE_RESETWALLPAPER) WallpaperPrivateResetWallpaperFunction(); protected: virtual ~WallpaperPrivateResetWallpaperFunction(); // AsyncExtensionFunction overrides. virtual bool RunAsync() override; }; class WallpaperPrivateSetCustomWallpaperFunction : public WallpaperFunctionBase { public: DECLARE_EXTENSION_FUNCTION("wallpaperPrivate.setCustomWallpaper", WALLPAPERPRIVATE_SETCUSTOMWALLPAPER) WallpaperPrivateSetCustomWallpaperFunction(); protected: virtual ~WallpaperPrivateSetCustomWallpaperFunction(); // AsyncExtensionFunction overrides. virtual bool RunAsync() override; private: virtual void OnWallpaperDecoded(const gfx::ImageSkia& wallpaper) override; // Generates thumbnail of custom wallpaper. A simple STRETCH is used for // generating thunbail. void GenerateThumbnail(const base::FilePath& thumbnail_path, scoped_ptr image); // Thumbnail is ready. Calls api function javascript callback. void ThumbnailGenerated(base::RefCountedBytes* data); scoped_ptr params; // User id of the active user when this api is been called. std::string user_id_; // User id hash of the logged in user. std::string user_id_hash_; // Sequence token associated with wallpaper operations. Shared with // WallpaperManager. base::SequencedWorkerPool::SequenceToken sequence_token_; }; class WallpaperPrivateSetCustomWallpaperLayoutFunction : public AsyncExtensionFunction { public: DECLARE_EXTENSION_FUNCTION("wallpaperPrivate.setCustomWallpaperLayout", WALLPAPERPRIVATE_SETCUSTOMWALLPAPERLAYOUT) WallpaperPrivateSetCustomWallpaperLayoutFunction(); protected: virtual ~WallpaperPrivateSetCustomWallpaperLayoutFunction(); // AsyncExtensionFunction overrides. virtual bool RunAsync() override; }; class WallpaperPrivateMinimizeInactiveWindowsFunction : public AsyncExtensionFunction { public: DECLARE_EXTENSION_FUNCTION("wallpaperPrivate.minimizeInactiveWindows", WALLPAPERPRIVATE_MINIMIZEINACTIVEWINDOWS) WallpaperPrivateMinimizeInactiveWindowsFunction(); protected: virtual ~WallpaperPrivateMinimizeInactiveWindowsFunction(); // AsyncExtensionFunction overrides. virtual bool RunAsync() override; }; class WallpaperPrivateRestoreMinimizedWindowsFunction : public AsyncExtensionFunction { public: DECLARE_EXTENSION_FUNCTION("wallpaperPrivate.restoreMinimizedWindows", WALLPAPERPRIVATE_RESTOREMINIMIZEDWINDOWS) WallpaperPrivateRestoreMinimizedWindowsFunction(); protected: virtual ~WallpaperPrivateRestoreMinimizedWindowsFunction(); // AsyncExtensionFunction overrides. virtual bool RunAsync() override; }; class WallpaperPrivateGetThumbnailFunction : public AsyncExtensionFunction { public: DECLARE_EXTENSION_FUNCTION("wallpaperPrivate.getThumbnail", WALLPAPERPRIVATE_GETTHUMBNAIL) WallpaperPrivateGetThumbnailFunction(); protected: virtual ~WallpaperPrivateGetThumbnailFunction(); // AsyncExtensionFunction overrides. virtual bool RunAsync() override; private: // Failed to get thumbnail for |file_name|. void Failure(const std::string& file_name); // Returns true to suppress javascript console error. Called when the // requested thumbnail is not found or corrupted in thumbnail directory. void FileNotLoaded(); // Sets data field to the loaded thumbnail binary data in the results. Called // when requested wallpaper thumbnail loaded successfully. void FileLoaded(const std::string& data); // Gets thumbnail from |path|. If |path| does not exist, call FileNotLoaded(). void Get(const base::FilePath& path); // Sequence token associated with wallpaper operations. Shared with // WallpaperManager. base::SequencedWorkerPool::SequenceToken sequence_token_; }; class WallpaperPrivateSaveThumbnailFunction : public AsyncExtensionFunction { public: DECLARE_EXTENSION_FUNCTION("wallpaperPrivate.saveThumbnail", WALLPAPERPRIVATE_SAVETHUMBNAIL) WallpaperPrivateSaveThumbnailFunction(); protected: virtual ~WallpaperPrivateSaveThumbnailFunction(); // AsyncExtensionFunction overrides. virtual bool RunAsync() override; private: // Failed to save thumbnail for |file_name|. void Failure(const std::string& file_name); // Saved thumbnail to thumbnail directory. void Success(); // Saves thumbnail to thumbnail directory as |file_name|. void Save(const std::string& data, const std::string& file_name); // Sequence token associated with wallpaper operations. Shared with // WallpaperManager. base::SequencedWorkerPool::SequenceToken sequence_token_; }; class WallpaperPrivateGetOfflineWallpaperListFunction : public AsyncExtensionFunction { public: DECLARE_EXTENSION_FUNCTION("wallpaperPrivate.getOfflineWallpaperList", WALLPAPERPRIVATE_GETOFFLINEWALLPAPERLIST) WallpaperPrivateGetOfflineWallpaperListFunction(); protected: virtual ~WallpaperPrivateGetOfflineWallpaperListFunction(); // AsyncExtensionFunction overrides. virtual bool RunAsync() override; private: // Enumerates the list of files in online wallpaper directory. void GetList(); // Sends the list of files to extension api caller. If no files or no // directory, sends empty list. void OnComplete(const std::vector& file_list); // Sequence token associated with wallpaper operations. Shared with // WallpaperManager. base::SequencedWorkerPool::SequenceToken sequence_token_; }; #endif // CHROME_BROWSER_CHROMEOS_EXTENSIONS_WALLPAPER_PRIVATE_API_H_