Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(106)

Side by Side Diff: chrome/browser/chromeos/extensions/wallpaper_private_api.cc

Issue 16634016: Support png wallpapers (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: spelling Created 7 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « no previous file | chrome/browser/chromeos/extensions/wallpaper_private_apitest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/chromeos/extensions/wallpaper_private_api.h" 5 #include "chrome/browser/chromeos/extensions/wallpaper_private_api.h"
6 6
7 #include <vector> 7 #include <vector>
8 8
9 #include "ash/shell.h" 9 #include "ash/shell.h"
10 #include "ash/wm/window_cycle_controller.h" 10 #include "ash/wm/window_cycle_controller.h"
11 #include "ash/wm/window_util.h" 11 #include "ash/wm/window_util.h"
12 #include "base/file_util.h" 12 #include "base/file_util.h"
13 #include "base/files/file_enumerator.h" 13 #include "base/files/file_enumerator.h"
14 #include "base/json/json_writer.h" 14 #include "base/json/json_writer.h"
15 #include "base/memory/scoped_ptr.h" 15 #include "base/memory/scoped_ptr.h"
16 #include "base/path_service.h" 16 #include "base/path_service.h"
17 #include "base/strings/string_number_conversions.h" 17 #include "base/strings/string_number_conversions.h"
18 #include "base/strings/stringprintf.h" 18 #include "base/strings/stringprintf.h"
19 #include "base/synchronization/cancellation_flag.h" 19 #include "base/synchronization/cancellation_flag.h"
20 #include "base/threading/sequenced_worker_pool.h" 20 #include "base/threading/sequenced_worker_pool.h"
21 #include "base/threading/worker_pool.h" 21 #include "base/threading/worker_pool.h"
22 #include "chrome/browser/browser_process.h" 22 #include "chrome/browser/browser_process.h"
23 #include "chrome/browser/chromeos/login/user.h" 23 #include "chrome/browser/chromeos/login/user.h"
24 #include "chrome/browser/chromeos/login/user_image.h" 24 #include "chrome/browser/chromeos/login/user_image.h"
25 #include "chrome/browser/chromeos/login/user_manager.h" 25 #include "chrome/browser/chromeos/login/user_manager.h"
26 #include "chrome/browser/chromeos/login/wallpaper_manager.h" 26 #include "chrome/browser/chromeos/login/wallpaper_manager.h"
27 #include "chrome/browser/extensions/event_router.h" 27 #include "chrome/browser/extensions/event_router.h"
28 #include "chrome/browser/image_decoder.h" 28 #include "chrome/browser/image_decoder.h"
29 #include "chrome/common/chrome_paths.h" 29 #include "chrome/common/chrome_paths.h"
30 #include "chromeos/login/login_state.h"
30 #include "content/public/browser/browser_thread.h" 31 #include "content/public/browser/browser_thread.h"
31 #include "googleurl/src/gurl.h" 32 #include "googleurl/src/gurl.h"
32 #include "grit/app_locale_settings.h" 33 #include "grit/app_locale_settings.h"
33 #include "grit/generated_resources.h" 34 #include "grit/generated_resources.h"
34 #include "grit/platform_locale_settings.h" 35 #include "grit/platform_locale_settings.h"
35 #include "net/url_request/url_fetcher.h" 36 #include "net/url_request/url_fetcher.h"
36 #include "net/url_request/url_fetcher_delegate.h" 37 #include "net/url_request/url_fetcher_delegate.h"
37 #include "net/url_request/url_request_status.h" 38 #include "net/url_request/url_request_status.h"
38 #include "ui/aura/window_observer.h" 39 #include "ui/aura/window_observer.h"
39 #include "ui/base/l10n/l10n_util.h" 40 #include "ui/base/l10n/l10n_util.h"
(...skipping 189 matching lines...) Expand 10 before | Expand all | Expand 10 after
229 } 230 }
230 231
231 class WallpaperFunctionBase::WallpaperDecoder : public ImageDecoder::Delegate { 232 class WallpaperFunctionBase::WallpaperDecoder : public ImageDecoder::Delegate {
232 public: 233 public:
233 explicit WallpaperDecoder(scoped_refptr<WallpaperFunctionBase> function) 234 explicit WallpaperDecoder(scoped_refptr<WallpaperFunctionBase> function)
234 : function_(function) { 235 : function_(function) {
235 } 236 }
236 237
237 void Start(const std::string& image_data) { 238 void Start(const std::string& image_data) {
238 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 239 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
239 image_decoder_ = new ImageDecoder(this, image_data, 240
240 ImageDecoder::ROBUST_JPEG_CODEC); 241 // This function can only be called after user login. It is fine to use
242 // unsafe image decoder here. Before user login, a robust jpeg decoder will
243 // be used.
244 CHECK(chromeos::LoginState::Get()->IsUserLoggedIn());
245 unsafe_image_decoder_ = new ImageDecoder(this, image_data,
246 ImageDecoder::DEFAULT_CODEC);
241 scoped_refptr<base::MessageLoopProxy> task_runner = 247 scoped_refptr<base::MessageLoopProxy> task_runner =
242 BrowserThread::GetMessageLoopProxyForThread(BrowserThread::UI); 248 BrowserThread::GetMessageLoopProxyForThread(BrowserThread::UI);
243 image_decoder_->Start(task_runner); 249 unsafe_image_decoder_->Start(task_runner);
244 } 250 }
245 251
246 void Cancel() { 252 void Cancel() {
247 cancel_flag_.Set(); 253 cancel_flag_.Set();
248 } 254 }
249 255
250 virtual void OnImageDecoded(const ImageDecoder* decoder, 256 virtual void OnImageDecoded(const ImageDecoder* decoder,
251 const SkBitmap& decoded_image) OVERRIDE { 257 const SkBitmap& decoded_image) OVERRIDE {
252 // Make the SkBitmap immutable as we won't modify it. This is important 258 // Make the SkBitmap immutable as we won't modify it. This is important
253 // because otherwise it gets duplicated during painting, wasting memory. 259 // because otherwise it gets duplicated during painting, wasting memory.
(...skipping 12 matching lines...) Expand all
266 } 272 }
267 273
268 virtual void OnDecodeImageFailed(const ImageDecoder* decoder) OVERRIDE { 274 virtual void OnDecodeImageFailed(const ImageDecoder* decoder) OVERRIDE {
269 function_->OnFailureOrCancel( 275 function_->OnFailureOrCancel(
270 l10n_util::GetStringUTF8(IDS_WALLPAPER_MANAGER_INVALID_WALLPAPER)); 276 l10n_util::GetStringUTF8(IDS_WALLPAPER_MANAGER_INVALID_WALLPAPER));
271 delete this; 277 delete this;
272 } 278 }
273 279
274 private: 280 private:
275 scoped_refptr<WallpaperFunctionBase> function_; 281 scoped_refptr<WallpaperFunctionBase> function_;
276 scoped_refptr<ImageDecoder> image_decoder_; 282 scoped_refptr<ImageDecoder> unsafe_image_decoder_;
277 base::CancellationFlag cancel_flag_; 283 base::CancellationFlag cancel_flag_;
278 284
279 DISALLOW_COPY_AND_ASSIGN(WallpaperDecoder); 285 DISALLOW_COPY_AND_ASSIGN(WallpaperDecoder);
280 }; 286 };
281 287
282 WallpaperFunctionBase::WallpaperDecoder* 288 WallpaperFunctionBase::WallpaperDecoder*
283 WallpaperFunctionBase::wallpaper_decoder_; 289 WallpaperFunctionBase::wallpaper_decoder_;
284 290
285 WallpaperFunctionBase::WallpaperFunctionBase() { 291 WallpaperFunctionBase::WallpaperFunctionBase() {
286 } 292 }
(...skipping 588 matching lines...) Expand 10 before | Expand all | Expand 10 after
875 this, email, source)); 881 this, email, source));
876 return true; 882 return true;
877 } 883 }
878 884
879 void WallpaperPrivateGetOfflineWallpaperListFunction::GetList( 885 void WallpaperPrivateGetOfflineWallpaperListFunction::GetList(
880 const std::string& email, 886 const std::string& email,
881 const std::string& source) { 887 const std::string& source) {
882 DCHECK(BrowserThread::GetBlockingPool()->IsRunningSequenceOnCurrentThread( 888 DCHECK(BrowserThread::GetBlockingPool()->IsRunningSequenceOnCurrentThread(
883 sequence_token_)); 889 sequence_token_));
884 std::vector<std::string> file_list; 890 std::vector<std::string> file_list;
891 // TODO(bshe): This api function is only used for ONLINE wallpapers. Remove
892 // source.
885 if (source == kOnlineSource) { 893 if (source == kOnlineSource) {
886 base::FilePath wallpaper_dir; 894 base::FilePath wallpaper_dir;
887 CHECK(PathService::Get(chrome::DIR_CHROMEOS_WALLPAPERS, &wallpaper_dir)); 895 CHECK(PathService::Get(chrome::DIR_CHROMEOS_WALLPAPERS, &wallpaper_dir));
888 if (file_util::DirectoryExists(wallpaper_dir)) { 896 if (file_util::DirectoryExists(wallpaper_dir)) {
889 base::FileEnumerator files(wallpaper_dir, false, 897 base::FileEnumerator files(wallpaper_dir, false,
890 base::FileEnumerator::FILES); 898 base::FileEnumerator::FILES);
891 for (base::FilePath current = files.Next(); !current.empty(); 899 for (base::FilePath current = files.Next(); !current.empty();
892 current = files.Next()) { 900 current = files.Next()) {
893 std::string file_name = current.BaseName().RemoveExtension().value(); 901 std::string file_name = current.BaseName().RemoveExtension().value();
894 // Do not add file name of small resolution wallpaper to the list. 902 // Do not add file name of small resolution wallpaper to the list.
895 if (!EndsWith(file_name, chromeos::kSmallWallpaperSuffix, true)) 903 if (!EndsWith(file_name, chromeos::kSmallWallpaperSuffix, true))
896 file_list.push_back(current.BaseName().value()); 904 file_list.push_back(current.BaseName().value());
897 } 905 }
898 } 906 }
899 } else {
900 base::FilePath custom_thumbnails_dir = chromeos::WallpaperManager::Get()->
901 GetCustomWallpaperPath(chromeos::kThumbnailWallpaperSubDir, email, "");
902 if (file_util::DirectoryExists(custom_thumbnails_dir)) {
903 base::FileEnumerator files(custom_thumbnails_dir, false,
904 base::FileEnumerator::FILES);
905 std::set<std::string> file_name_set;
906 for (base::FilePath current = files.Next(); !current.empty();
907 current = files.Next()) {
908 file_name_set.insert(current.BaseName().value());
909 }
910 for (std::set<std::string>::reverse_iterator rit = file_name_set.rbegin();
911 rit != file_name_set.rend(); ++rit) {
912 file_list.push_back(*rit);
913 }
914 }
915 } 907 }
916 BrowserThread::PostTask( 908 BrowserThread::PostTask(
917 BrowserThread::UI, FROM_HERE, 909 BrowserThread::UI, FROM_HERE,
918 base::Bind(&WallpaperPrivateGetOfflineWallpaperListFunction::OnComplete, 910 base::Bind(&WallpaperPrivateGetOfflineWallpaperListFunction::OnComplete,
919 this, file_list)); 911 this, file_list));
920 } 912 }
921 913
922 void WallpaperPrivateGetOfflineWallpaperListFunction::OnComplete( 914 void WallpaperPrivateGetOfflineWallpaperListFunction::OnComplete(
923 const std::vector<std::string>& file_list) { 915 const std::vector<std::string>& file_list) {
924 ListValue* results = new ListValue(); 916 ListValue* results = new ListValue();
925 results->AppendStrings(file_list); 917 results->AppendStrings(file_list);
926 SetResult(results); 918 SetResult(results);
927 SendResponse(true); 919 SendResponse(true);
928 } 920 }
OLDNEW
« no previous file with comments | « no previous file | chrome/browser/chromeos/extensions/wallpaper_private_apitest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698