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

Unified Diff: chrome/browser/image_decoder.cc

Issue 1159363002: [Download Notification] Show preview if downloaded file is image (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Adressed comment #10 Created 5 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 side-by-side diff with in-line comments
Download patch
Index: chrome/browser/image_decoder.cc
diff --git a/chrome/browser/image_decoder.cc b/chrome/browser/image_decoder.cc
index 7d26e8053b1041e221efa4b2f7a865b535a22215..e454d008f61fc4fa14487810b4010c8f1ce97005 100644
--- a/chrome/browser/image_decoder.cc
+++ b/chrome/browser/image_decoder.cc
@@ -10,6 +10,8 @@
#include "chrome/common/chrome_utility_messages.h"
#include "chrome/grit/generated_resources.h"
#include "content/public/browser/browser_thread.h"
+#include "content/public/browser/child_process_data.h"
+#include "content/public/browser/render_process_host.h"
#include "content/public/browser/utility_process_host.h"
#include "ui/base/l10n/l10n_util.h"
@@ -55,6 +57,14 @@ ImageDecoder::ImageRequest::~ImageRequest() {
// static
void ImageDecoder::Start(ImageRequest* image_request,
+ const base::FilePath& image_file_path) {
+ g_decoder.Pointer()->StartWithOptionsImpl(image_request,
+ image_file_path, std::string(),
+ DEFAULT_CODEC, false);
+}
+
+// static
+void ImageDecoder::Start(ImageRequest* image_request,
const std::string& image_data) {
StartWithOptions(image_request, image_data, DEFAULT_CODEC, false);
}
@@ -64,17 +74,25 @@ void ImageDecoder::StartWithOptions(ImageRequest* image_request,
const std::string& image_data,
ImageCodec image_codec,
bool shrink_to_fit) {
- g_decoder.Pointer()->StartWithOptionsImpl(image_request, image_data,
+ g_decoder.Pointer()->StartWithOptionsImpl(image_request,
+ base::FilePath(), image_data,
image_codec, shrink_to_fit);
}
void ImageDecoder::StartWithOptionsImpl(ImageRequest* image_request,
+ const base::FilePath& image_file_path,
const std::string& image_data,
ImageCodec image_codec,
bool shrink_to_fit) {
DCHECK(image_request);
DCHECK(image_request->task_runner());
+ base::File image_file;
+ if (!image_file_path.empty()) {
+ image_file.Initialize(image_file_path,
+ base::File::FLAG_OPEN | base::File::FLAG_READ);
asanka 2015/06/11 03:30:51 Indentation is off.
yoshiki 2015/06/11 08:22:09 Done.
+ }
+
int request_id;
{
base::AutoLock lock(map_lock_);
@@ -87,6 +105,7 @@ void ImageDecoder::StartWithOptionsImpl(ImageRequest* image_request,
base::Bind(
&ImageDecoder::DecodeImageInSandbox,
g_decoder.Pointer(), request_id,
+ base::Passed(image_file.Pass()),
std::vector<unsigned char>(image_data.begin(), image_data.end()),
image_codec, shrink_to_fit));
}
@@ -99,6 +118,7 @@ void ImageDecoder::Cancel(ImageRequest* image_request) {
void ImageDecoder::DecodeImageInSandbox(
int request_id,
+ base::File image_file,
const std::vector<unsigned char>& image_data,
ImageCodec image_codec,
bool shrink_to_fit) {
@@ -133,17 +153,32 @@ void ImageDecoder::DecodeImageInSandbox(
}
batch_mode_timer_->Reset();
- switch (image_codec) {
+ if (!image_data.empty()) {
+ switch (image_codec) {
#if defined(OS_CHROMEOS)
- case ROBUST_JPEG_CODEC:
- utility_process_host_->Send(new ChromeUtilityMsg_RobustJPEGDecodeImage(
- image_data, request_id));
- break;
+ case ROBUST_JPEG_CODEC:
+ utility_process_host_->Send(new ChromeUtilityMsg_RobustJPEGDecodeImage(
+ image_data, request_id));
+ break;
#endif // defined(OS_CHROMEOS)
- case DEFAULT_CODEC:
- utility_process_host_->Send(new ChromeUtilityMsg_DecodeImage(
- image_data, shrink_to_fit, request_id));
- break;
+ case DEFAULT_CODEC:
+ utility_process_host_->Send(new ChromeUtilityMsg_DecodeImage(
+ image_data, shrink_to_fit, request_id));
+ break;
+ }
+ } else if (image_file.IsValid() && image_codec == DEFAULT_CODEC) {
+ base::ProcessHandle utility_process =
+ content::RenderProcessHost::run_renderer_in_process() ?
+ base::GetCurrentProcessHandle() :
+ utility_process_host_->GetData().handle;
+
+ utility_process_host_->Send(new ChromeUtilityMsg_DecodeImageByHandle(
+ IPC::TakeFileHandleForProcess(image_file.Pass(), utility_process),
+ shrink_to_fit, request_id));
+ } else {
+ image_request->task_runner()->PostTask(
+ FROM_HERE,
+ base::Bind(&ImageDecoder::RunOnDecodeImageFailed, this, request_id));
}
}

Powered by Google App Engine
This is Rietveld 408576698