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

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

Issue 12334030: New custom wallpaper picker UI (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Add bug reference Created 7 years, 9 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
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"
(...skipping 506 matching lines...) Expand 10 before | Expand all | Expand 10 after
517 517
518 bool WallpaperPrivateSetCustomWallpaperFunction::RunImpl() { 518 bool WallpaperPrivateSetCustomWallpaperFunction::RunImpl() {
519 BinaryValue* input = NULL; 519 BinaryValue* input = NULL;
520 EXTENSION_FUNCTION_VALIDATE(args_->GetBinary(0, &input)); 520 EXTENSION_FUNCTION_VALIDATE(args_->GetBinary(0, &input));
521 521
522 std::string layout_string; 522 std::string layout_string;
523 EXTENSION_FUNCTION_VALIDATE(args_->GetString(1, &layout_string)); 523 EXTENSION_FUNCTION_VALIDATE(args_->GetString(1, &layout_string));
524 EXTENSION_FUNCTION_VALIDATE(!layout_string.empty()); 524 EXTENSION_FUNCTION_VALIDATE(!layout_string.empty());
525 layout_ = GetLayoutEnum(layout_string); 525 layout_ = GetLayoutEnum(layout_string);
526 526
527 EXTENSION_FUNCTION_VALIDATE(args_->GetBoolean(2, &generate_thumbnail_));
528
529 EXTENSION_FUNCTION_VALIDATE(args_->GetString(3, &file_name_));
530 EXTENSION_FUNCTION_VALIDATE(!file_name_.empty());
531
527 // Gets email address while at UI thread. 532 // Gets email address while at UI thread.
528 email_ = chromeos::UserManager::Get()->GetLoggedInUser()->email(); 533 email_ = chromeos::UserManager::Get()->GetLoggedInUser()->email();
529 534
530 image_data_.assign(input->GetBuffer(), input->GetSize()); 535 image_data_.assign(input->GetBuffer(), input->GetSize());
531 StartDecode(image_data_); 536 StartDecode(image_data_);
532 537
533 return true; 538 return true;
534 } 539 }
535 540
536 void WallpaperPrivateSetCustomWallpaperFunction::OnWallpaperDecoded( 541 void WallpaperPrivateSetCustomWallpaperFunction::OnWallpaperDecoded(
537 const gfx::ImageSkia& wallpaper) { 542 const gfx::ImageSkia& wallpaper) {
538 chromeos::WallpaperManager* wallpaper_manager = 543 chromeos::WallpaperManager* wallpaper_manager =
539 chromeos::WallpaperManager::Get(); 544 chromeos::WallpaperManager::Get();
540 chromeos::UserImage::RawImage raw_image(image_data_.begin(), 545 chromeos::UserImage::RawImage raw_image(image_data_.begin(),
541 image_data_.end()); 546 image_data_.end());
542 chromeos::UserImage image(wallpaper, raw_image); 547 chromeos::UserImage image(wallpaper, raw_image);
543 std::string file = base::Int64ToString(base::Time::Now().ToInternalValue());
544 base::FilePath thumbnail_path = wallpaper_manager->GetCustomWallpaperPath( 548 base::FilePath thumbnail_path = wallpaper_manager->GetCustomWallpaperPath(
545 chromeos::kThumbnailWallpaperSubDir, email_, file); 549 chromeos::kThumbnailWallpaperSubDir, email_, file_name_);
546 550
547 sequence_token_ = BrowserThread::GetBlockingPool()-> 551 sequence_token_ = BrowserThread::GetBlockingPool()->
548 GetNamedSequenceToken(chromeos::kWallpaperSequenceTokenName); 552 GetNamedSequenceToken(chromeos::kWallpaperSequenceTokenName);
549 scoped_refptr<base::SequencedTaskRunner> task_runner = 553 scoped_refptr<base::SequencedTaskRunner> task_runner =
550 BrowserThread::GetBlockingPool()-> 554 BrowserThread::GetBlockingPool()->
551 GetSequencedTaskRunnerWithShutdownBehavior(sequence_token_, 555 GetSequencedTaskRunnerWithShutdownBehavior(sequence_token_,
552 base::SequencedWorkerPool::BLOCK_SHUTDOWN); 556 base::SequencedWorkerPool::BLOCK_SHUTDOWN);
553 557
554 wallpaper.EnsureRepsForSupportedScaleFactors();
555 scoped_ptr<gfx::ImageSkia> deep_copy(wallpaper.DeepCopy());
556 // Generates thumbnail before call api function callback. We can then request
557 // thumbnail in the javascript callback.
558 task_runner->PostTask(FROM_HERE,
559 base::Bind(&WallpaperPrivateSetCustomWallpaperFunction::GenerateThumbnail,
560 this, thumbnail_path, base::Passed(&deep_copy)));
561
562 // In the new wallpaper picker UI, we do not depend on WallpaperDelegate 558 // In the new wallpaper picker UI, we do not depend on WallpaperDelegate
563 // to refresh thumbnail. Uses a null delegate here. 559 // to refresh thumbnail. Uses a null delegate here.
564 wallpaper_manager->SetCustomWallpaper(email_, file, layout_, 560 wallpaper_manager->SetCustomWallpaper(email_, file_name_, layout_,
565 chromeos::User::CUSTOMIZED, 561 chromeos::User::CUSTOMIZED,
566 image); 562 image);
567 wallpaper_decoder_ = NULL; 563 wallpaper_decoder_ = NULL;
564
565 if (generate_thumbnail_) {
566 wallpaper.EnsureRepsForSupportedScaleFactors();
567 scoped_ptr<gfx::ImageSkia> deep_copy(wallpaper.DeepCopy());
568 // Generates thumbnail before call api function callback. We can then
569 // request thumbnail in the javascript callback.
570 task_runner->PostTask(FROM_HERE,
571 base::Bind(
572 &WallpaperPrivateSetCustomWallpaperFunction::GenerateThumbnail,
573 this, thumbnail_path, base::Passed(&deep_copy)));
574 } else {
575 SendResponse(true);
576 }
568 } 577 }
569 578
570 void WallpaperPrivateSetCustomWallpaperFunction::GenerateThumbnail( 579 void WallpaperPrivateSetCustomWallpaperFunction::GenerateThumbnail(
571 const base::FilePath& thumbnail_path, scoped_ptr<gfx::ImageSkia> image) { 580 const base::FilePath& thumbnail_path, scoped_ptr<gfx::ImageSkia> image) {
572 DCHECK(BrowserThread::GetBlockingPool()->IsRunningSequenceOnCurrentThread( 581 DCHECK(BrowserThread::GetBlockingPool()->IsRunningSequenceOnCurrentThread(
573 sequence_token_)); 582 sequence_token_));
574 chromeos::UserImage wallpaper(*image.get()); 583 chromeos::UserImage wallpaper(*image.get());
575 if (!file_util::PathExists(thumbnail_path.DirName())) 584 if (!file_util::PathExists(thumbnail_path.DirName()))
576 file_util::CreateDirectory(thumbnail_path.DirName()); 585 file_util::CreateDirectory(thumbnail_path.DirName());
577 586
578 chromeos::WallpaperManager::Get()->ResizeAndSaveWallpaper( 587 scoped_refptr<base::RefCountedBytes> data;
588 chromeos::WallpaperManager::Get()->ResizeWallpaper(
579 wallpaper, 589 wallpaper,
580 thumbnail_path,
581 ash::WALLPAPER_LAYOUT_STRETCH, 590 ash::WALLPAPER_LAYOUT_STRETCH,
582 ash::kWallpaperThumbnailWidth, 591 ash::kWallpaperThumbnailWidth,
583 ash::kWallpaperThumbnailHeight); 592 ash::kWallpaperThumbnailHeight,
584 std::string file_name = thumbnail_path.BaseName().value(); 593 &data);
585 BrowserThread::PostTask( 594 BrowserThread::PostTask(
586 BrowserThread::UI, FROM_HERE, 595 BrowserThread::UI, FROM_HERE,
587 base::Bind( 596 base::Bind(
588 &WallpaperPrivateSetCustomWallpaperFunction::ThumbnailGenerated, 597 &WallpaperPrivateSetCustomWallpaperFunction::ThumbnailGenerated,
589 this, file_name)); 598 this, data));
590 } 599 }
591 600
592 void WallpaperPrivateSetCustomWallpaperFunction::ThumbnailGenerated( 601 void WallpaperPrivateSetCustomWallpaperFunction::ThumbnailGenerated(
593 const std::string& file_name) { 602 base::RefCountedBytes* data) {
594 SetResult(new base::StringValue(file_name)); 603 BinaryValue* result = BinaryValue::CreateWithCopiedBuffer(
604 reinterpret_cast<const char*>(data->front()), data->size());
605 SetResult(result);
595 SendResponse(true); 606 SendResponse(true);
596 } 607 }
597 608
598 WallpaperPrivateSetCustomWallpaperLayoutFunction:: 609 WallpaperPrivateSetCustomWallpaperLayoutFunction::
599 WallpaperPrivateSetCustomWallpaperLayoutFunction() {} 610 WallpaperPrivateSetCustomWallpaperLayoutFunction() {}
600 611
601 WallpaperPrivateSetCustomWallpaperLayoutFunction:: 612 WallpaperPrivateSetCustomWallpaperLayoutFunction::
602 ~WallpaperPrivateSetCustomWallpaperLayoutFunction() {} 613 ~WallpaperPrivateSetCustomWallpaperLayoutFunction() {}
603 614
604 bool WallpaperPrivateSetCustomWallpaperLayoutFunction::RunImpl() { 615 bool WallpaperPrivateSetCustomWallpaperLayoutFunction::RunImpl() {
(...skipping 262 matching lines...) Expand 10 before | Expand all | Expand 10 after
867 this, file_list)); 878 this, file_list));
868 } 879 }
869 880
870 void WallpaperPrivateGetOfflineWallpaperListFunction::OnComplete( 881 void WallpaperPrivateGetOfflineWallpaperListFunction::OnComplete(
871 const std::vector<std::string>& file_list) { 882 const std::vector<std::string>& file_list) {
872 ListValue* results = new ListValue(); 883 ListValue* results = new ListValue();
873 results->AppendStrings(file_list); 884 results->AppendStrings(file_list);
874 SetResult(results); 885 SetResult(results);
875 SendResponse(true); 886 SendResponse(true);
876 } 887 }
OLDNEW
« no previous file with comments | « chrome/browser/chromeos/extensions/wallpaper_private_api.h ('k') | chrome/browser/chromeos/login/wallpaper_manager.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698