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

Side by Side Diff: components/printing/service/pdf_compositor_impl.cc

Issue 2919823004: Add error handling and unit test for pdf compositor service (Closed)
Patch Set: rebase Created 3 years, 4 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
« no previous file with comments | « components/printing/service/DEPS ('k') | components/printing/service/pdf_compositor_service.h » ('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 2017 The Chromium Authors. All rights reserved. 1 // Copyright 2017 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 "components/printing/service/pdf_compositor_impl.h" 5 #include "components/printing/service/pdf_compositor_impl.h"
6 6
7 #include <utility> 7 #include <utility>
8 #include <vector> 8 #include <vector>
9 9
10 #include "base/logging.h" 10 #include "base/logging.h"
(...skipping 25 matching lines...) Expand all
36 36
37 const MojoResult result = mojo::UnwrapSharedMemoryHandle( 37 const MojoResult result = mojo::UnwrapSharedMemoryHandle(
38 std::move(sk_handle), &memory_handle, &memory_size, &read_only_flag); 38 std::move(sk_handle), &memory_handle, &memory_size, &read_only_flag);
39 DCHECK_EQ(MOJO_RESULT_OK, result); 39 DCHECK_EQ(MOJO_RESULT_OK, result);
40 DCHECK_GT(memory_size, 0u); 40 DCHECK_GT(memory_size, 0u);
41 41
42 std::unique_ptr<base::SharedMemory> shm = 42 std::unique_ptr<base::SharedMemory> shm =
43 base::MakeUnique<base::SharedMemory>(memory_handle, true); 43 base::MakeUnique<base::SharedMemory>(memory_handle, true);
44 if (!shm->Map(memory_size)) { 44 if (!shm->Map(memory_size)) {
45 DLOG(ERROR) << "CompositePdf: Shared memory map failed."; 45 DLOG(ERROR) << "CompositePdf: Shared memory map failed.";
46 std::move(callback).Run(mojo::ScopedSharedBufferHandle()); 46 std::move(callback).Run(mojom::PdfCompositor::Status::HANDLE_MAP_ERROR,
47 mojo::ScopedSharedBufferHandle());
47 return; 48 return;
48 } 49 }
49 50
50 SkMemoryStream stream(shm->memory(), memory_size); 51 SkMemoryStream stream(shm->memory(), memory_size);
51 int page_count = SkMultiPictureDocumentReadPageCount(&stream); 52 int page_count = SkMultiPictureDocumentReadPageCount(&stream);
52 if (!page_count) { 53 if (!page_count) {
53 DLOG(ERROR) << "CompositePdf: No page is read."; 54 DLOG(ERROR) << "CompositePdf: No page is read.";
54 std::move(callback).Run(mojo::ScopedSharedBufferHandle()); 55 std::move(callback).Run(mojom::PdfCompositor::Status::CONTENT_FORMAT_ERROR,
56 mojo::ScopedSharedBufferHandle());
55 return; 57 return;
56 } 58 }
57 59
58 std::vector<SkDocumentPage> pages(page_count); 60 std::vector<SkDocumentPage> pages(page_count);
59 if (!SkMultiPictureDocumentRead(&stream, pages.data(), page_count)) { 61 if (!SkMultiPictureDocumentRead(&stream, pages.data(), page_count)) {
60 DLOG(ERROR) << "CompositePdf: Page reading failed."; 62 DLOG(ERROR) << "CompositePdf: Page reading failed.";
61 std::move(callback).Run(mojo::ScopedSharedBufferHandle()); 63 std::move(callback).Run(mojom::PdfCompositor::Status::CONTENT_FORMAT_ERROR,
64 mojo::ScopedSharedBufferHandle());
62 return; 65 return;
63 } 66 }
64 67
65 SkDynamicMemoryWStream wstream; 68 SkDynamicMemoryWStream wstream;
66 sk_sp<SkDocument> doc = MakePdfDocument(creator_, &wstream); 69 sk_sp<SkDocument> doc = MakePdfDocument(creator_, &wstream);
67 70
68 for (const auto& page : pages) { 71 for (const auto& page : pages) {
69 SkCanvas* canvas = doc->beginPage(page.fSize.width(), page.fSize.height()); 72 SkCanvas* canvas = doc->beginPage(page.fSize.width(), page.fSize.height());
70 canvas->drawPicture(page.fPicture); 73 canvas->drawPicture(page.fPicture);
71 doc->endPage(); 74 doc->endPage();
72 } 75 }
73 doc->close(); 76 doc->close();
74 77
75 mojo::ScopedSharedBufferHandle buffer = 78 mojo::ScopedSharedBufferHandle buffer =
76 mojo::SharedBufferHandle::Create(wstream.bytesWritten()); 79 mojo::SharedBufferHandle::Create(wstream.bytesWritten());
77 DCHECK(buffer.is_valid()); 80 DCHECK(buffer.is_valid());
78 81
79 mojo::ScopedSharedBufferMapping mapping = buffer->Map(wstream.bytesWritten()); 82 mojo::ScopedSharedBufferMapping mapping = buffer->Map(wstream.bytesWritten());
80 DCHECK(mapping); 83 DCHECK(mapping);
81 wstream.copyToAndReset(mapping.get()); 84 wstream.copyToAndReset(mapping.get());
82 85
83 std::move(callback).Run(std::move(buffer)); 86 std::move(callback).Run(mojom::PdfCompositor::Status::SUCCESS,
87 std::move(buffer));
84 } 88 }
85 89
86 } // namespace printing 90 } // namespace printing
OLDNEW
« no previous file with comments | « components/printing/service/DEPS ('k') | components/printing/service/pdf_compositor_service.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698