Index: chrome/browser/chromeos/extensions/wallpaper_private_api.cc |
diff --git a/chrome/browser/chromeos/extensions/wallpaper_private_api.cc b/chrome/browser/chromeos/extensions/wallpaper_private_api.cc |
index d82c71199e0141db6106236c94edfeb0fadc2e2e..ca5316dda027f87f83f9b2eb77cbb55ac74b3947 100644 |
--- a/chrome/browser/chromeos/extensions/wallpaper_private_api.cc |
+++ b/chrome/browser/chromeos/extensions/wallpaper_private_api.cc |
@@ -426,3 +426,153 @@ bool WallpaperRestoreMinimizedWindowsFunction::RunImpl() { |
WindowStateManager::RestoreWindows(); |
return true; |
} |
+ |
+WallpaperGetThumbnailFunction::WallpaperGetThumbnailFunction() { |
+} |
+ |
+WallpaperGetThumbnailFunction::~WallpaperGetThumbnailFunction() { |
+} |
+ |
+bool WallpaperGetThumbnailFunction::RunImpl() { |
+ std::string url; |
+ if (args_ == NULL || !args_->GetString(0, &url) || url.empty()) { |
miket_OOO
2012/11/28 00:17:19
You ought to be able to use EXTENSION_FUNCTION_VAL
bshe
2012/11/28 18:54:26
Done.
|
+ return false; |
+ } |
+ std::string file_name = GURL(url).ExtractFileName(); |
+ sequence_token_ = BrowserThread::GetBlockingPool()-> |
+ GetNamedSequenceToken(chromeos::kWallpaperSequenceTokenName); |
+ scoped_refptr<base::SequencedTaskRunner> task_runner = |
+ BrowserThread::GetBlockingPool()-> |
+ GetSequencedTaskRunnerWithShutdownBehavior(sequence_token_, |
+ base::SequencedWorkerPool::CONTINUE_ON_SHUTDOWN); |
+ |
+ task_runner->PostTask(FROM_HERE, |
+ base::Bind(&WallpaperGetThumbnailFunction::Get, |
+ this, file_name)); |
+ return true; |
+} |
+ |
+void WallpaperGetThumbnailFunction::Failure() { |
+ SetError("Failed to create wallpaper thumbnails directory."); |
flackr
2012/11/27 22:04:36
Not localized, is this displayed to the user?
bshe
2012/11/28 18:54:26
It is not displayed to user. The js console and ch
|
+ SendResponse(false); |
+} |
+ |
+void WallpaperGetThumbnailFunction::FileNotLoaded() { |
+ DictionaryValue* results = new DictionaryValue(); |
+ results->SetBoolean("success", false); |
+ SetResult(results); |
+ SendResponse(true); |
+} |
+ |
+void WallpaperGetThumbnailFunction::FileLoaded(const std::string& data) { |
+ DictionaryValue* results = new DictionaryValue(); |
+ results->SetBoolean("success", true); |
+ BinaryValue* thumbnail = BinaryValue::CreateWithCopiedBuffer(data.c_str(), |
+ data.size()); |
+ results->Set("data", thumbnail); |
+ SetResult(results); |
+ SendResponse(true); |
+} |
+ |
+void WallpaperGetThumbnailFunction::Get(const std::string& file_name) { |
+ DCHECK(BrowserThread::GetBlockingPool()->IsRunningSequenceOnCurrentThread( |
+ sequence_token_)); |
+ FilePath wallpaper_thumbnails_dir; |
+ CHECK(PathService::Get(chrome::DIR_CHROMEOS_WALLPAPER_THUMBNAILS, |
+ &wallpaper_thumbnails_dir)); |
+ if (!file_util::DirectoryExists(wallpaper_thumbnails_dir) && |
+ !file_util::CreateDirectory(wallpaper_thumbnails_dir)) { |
+ BrowserThread::PostTask( |
+ BrowserThread::UI, FROM_HERE, |
+ base::Bind(&WallpaperGetThumbnailFunction::Failure, |
+ this)); |
miket_OOO
2012/11/28 00:17:19
no need to wrap (same with below)
bshe
2012/11/28 18:54:26
Done.
|
+ return; |
+ } |
+ |
+ FilePath file_path = wallpaper_thumbnails_dir.Append(file_name); |
+ std::string data; |
+ if (!file_util::PathExists(file_path) || |
+ file_util::ReadFileToString(file_path, &data) == -1) { |
+ BrowserThread::PostTask( |
+ BrowserThread::UI, FROM_HERE, |
+ base::Bind(&WallpaperGetThumbnailFunction::FileNotLoaded, |
+ this)); |
+ return; |
+ } |
+ BrowserThread::PostTask( |
+ BrowserThread::UI, FROM_HERE, |
+ base::Bind(&WallpaperGetThumbnailFunction::FileLoaded, |
+ this, data)); |
+} |
+ |
+WallpaperSaveThumbnailFunction::WallpaperSaveThumbnailFunction() { |
+} |
+ |
+WallpaperSaveThumbnailFunction::~WallpaperSaveThumbnailFunction() { |
+} |
+ |
+bool WallpaperSaveThumbnailFunction::RunImpl() { |
+ BinaryValue* input = NULL; |
+ if (args_ == NULL || !args_->GetBinary(0, &input)) { |
+ return false; |
+ } |
+ std::string url; |
+ if (!args_->GetString(1, &url) || url.empty()) { |
+ return false; |
+ } |
+ std::string file_name = GURL(url).ExtractFileName(); |
+ std::string data(input->GetBuffer(), input->GetSize()); |
+ |
+ sequence_token_ = BrowserThread::GetBlockingPool()-> |
+ GetNamedSequenceToken(chromeos::kWallpaperSequenceTokenName); |
+ scoped_refptr<base::SequencedTaskRunner> task_runner = |
+ BrowserThread::GetBlockingPool()-> |
+ GetSequencedTaskRunnerWithShutdownBehavior(sequence_token_, |
+ base::SequencedWorkerPool::CONTINUE_ON_SHUTDOWN); |
+ |
+ task_runner->PostTask(FROM_HERE, |
+ base::Bind(&WallpaperSaveThumbnailFunction::Save, |
+ this, data, file_name)); |
+ return true; |
+} |
+ |
+void WallpaperSaveThumbnailFunction::Failure() { |
+ SetError("Failed to save thumbnail"); |
flackr
2012/11/27 22:04:36
ditto.
bshe
2012/11/28 18:54:26
ditto.
On 2012/11/27 22:04:36, flackr wrote:
|
+ SendResponse(false); |
+} |
+ |
+void WallpaperSaveThumbnailFunction::Success() { |
+ SendResponse(true); |
+} |
+ |
+void WallpaperSaveThumbnailFunction::Save(const std::string& data, |
+ const std::string& file_name) { |
flackr
2012/11/27 22:04:36
Seems like you should be able to share this saving
bshe
2012/11/28 18:54:26
Done.
|
+ DCHECK(BrowserThread::GetBlockingPool()->IsRunningSequenceOnCurrentThread( |
+ sequence_token_)); |
+ FilePath wallpaper_thumbnails_dir; |
+ CHECK(PathService::Get(chrome::DIR_CHROMEOS_WALLPAPER_THUMBNAILS, |
+ &wallpaper_thumbnails_dir)); |
+ if (!file_util::DirectoryExists(wallpaper_thumbnails_dir) && |
+ !file_util::CreateDirectory(wallpaper_thumbnails_dir)) { |
+ BrowserThread::PostTask( |
+ BrowserThread::UI, FROM_HERE, |
+ base::Bind(&WallpaperSaveThumbnailFunction::Failure, |
+ this)); |
+ return; |
+ } |
+ FilePath file_path = wallpaper_thumbnails_dir.Append(file_name); |
+ if (!file_util::PathExists(file_path)) { |
+ size_t written_bytes = file_util::WriteFile(file_path, data.c_str(), |
+ data.size()); |
+ if (written_bytes != data.size()) { |
+ BrowserThread::PostTask( |
+ BrowserThread::UI, FROM_HERE, |
+ base::Bind(&WallpaperSaveThumbnailFunction::Failure, |
+ this)); |
flackr
2012/11/27 22:04:36
return; ?
Won't this proceed to post a success me
miket_OOO
2012/11/28 00:17:19
Good catch.
bshe
2012/11/28 18:54:26
right. I must accidentally replaced the return wit
bshe
2012/11/28 18:54:26
Done.
|
+ } |
+ } |
+ BrowserThread::PostTask( |
+ BrowserThread::UI, FROM_HERE, |
+ base::Bind(&WallpaperSaveThumbnailFunction::Success, |
+ this)); |
+} |