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

Side by Side Diff: chrome/renderer/mock_printer.cc

Issue 149644: Print only the focused frame. This makes more sense than trying to print all... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 11 years, 5 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) 2009 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2009 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/renderer/mock_printer.h" 5 #include "chrome/renderer/mock_printer.h"
6 6
7 #include "base/file_util.h" 7 #include "base/file_util.h"
8 #include "base/gfx/png_encoder.h"
9 #include "base/logging.h" 8 #include "base/logging.h"
10 #include "base/md5.h"
11 #include "base/shared_memory.h" 9 #include "base/shared_memory.h"
12 #include "chrome/common/ipc_message_utils.h" 10 #include "chrome/common/ipc_message_utils.h"
13 #include "chrome/common/render_messages.h" 11 #include "chrome/common/render_messages.h"
14 #include "testing/gtest/include/gtest/gtest.h" 12 #include "testing/gtest/include/gtest/gtest.h"
15 13
16 MockPrinter::MockPrinter() 14 MockPrinter::MockPrinter()
17 : printable_width_(0), 15 : printable_width_(0),
18 printable_height_(0), 16 printable_height_(0),
19 dpi_(72), 17 dpi_(72),
20 max_shrink_(2.0), 18 max_shrink_(2.0),
(...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after
109 107
110 #if defined(OS_WIN) 108 #if defined(OS_WIN)
111 // Load the EMF data sent from a RenderView object and create a PageData 109 // Load the EMF data sent from a RenderView object and create a PageData
112 // object. 110 // object.
113 // We duplicate the given file handle when creating a base::SharedMemory 111 // We duplicate the given file handle when creating a base::SharedMemory
114 // instance so that its destructor closes the copy. 112 // instance so that its destructor closes the copy.
115 EXPECT_GT(params.data_size, 0U); 113 EXPECT_GT(params.data_size, 0U);
116 base::SharedMemory emf_data(params.metafile_data_handle, true, 114 base::SharedMemory emf_data(params.metafile_data_handle, true,
117 GetCurrentProcess()); 115 GetCurrentProcess());
118 emf_data.Map(params.data_size); 116 emf_data.Map(params.data_size);
119 MockPrinterPage* page_data = driver_.LoadSource(emf_data.memory(), 117 printing::NativeMetafile metafile;
120 params.data_size); 118 metafile.CreateFromData(emf_data.memory(), params.data_size);
119 printing::Image image(metafile);
120 MockPrinterPage* page_data = new MockPrinterPage(emf_data.memory(),
121 params.data_size,
122 image);
121 if (!page_data) { 123 if (!page_data) {
122 printer_status_ = PRINTER_ERROR; 124 printer_status_ = PRINTER_ERROR;
123 return; 125 return;
124 } 126 }
125 127
126 scoped_refptr<MockPrinterPage> page(page_data); 128 scoped_refptr<MockPrinterPage> page(page_data);
127 pages_.push_back(page); 129 pages_.push_back(page);
128 #endif 130 #endif
129 131
130 // We finish printing a printing job. 132 // We finish printing a printing job.
131 // Reset the job status and the printer status. 133 // Reset the job status and the printer status.
132 ++page_number_; 134 ++page_number_;
133 if (number_pages_ == page_number_) 135 if (number_pages_ == page_number_)
134 ResetPrinter(); 136 ResetPrinter();
135 } 137 }
136 138
137 int MockPrinter::GetPrintedPages() const { 139 int MockPrinter::GetPrintedPages() const {
138 if (printer_status_ != PRINTER_READY) 140 if (printer_status_ != PRINTER_READY)
139 return -1; 141 return -1;
140 return page_number_; 142 return page_number_;
141 } 143 }
142 144
145 const MockPrinterPage* MockPrinter::GetPrintedPage(size_t pageno) const {
146 if (pages_.size() > pageno)
147 return pages_[pageno];
148 else
149 return NULL;
150 }
151
143 int MockPrinter::GetWidth(size_t page) const { 152 int MockPrinter::GetWidth(size_t page) const {
144 if (printer_status_ != PRINTER_READY || page >= pages_.size()) 153 if (printer_status_ != PRINTER_READY || page >= pages_.size())
145 return -1; 154 return -1;
146 return pages_[page]->width(); 155 return pages_[page]->width();
147 } 156 }
148 157
149 int MockPrinter::GetHeight(size_t page) const { 158 int MockPrinter::GetHeight(size_t page) const {
150 if (printer_status_ != PRINTER_READY || page >= pages_.size()) 159 if (printer_status_ != PRINTER_READY || page >= pages_.size())
151 return -1; 160 return -1;
152 return pages_[page]->height(); 161 return pages_[page]->height();
153 } 162 }
154 163
155 bool MockPrinter::GetSourceChecksum(size_t page, std::string* checksum) const {
156 if (printer_status_ != PRINTER_READY || page >= pages_.size())
157 return false;
158 return GetChecksum(pages_[page]->source_data(), pages_[page]->source_size(),
159 checksum);
160 }
161
162 bool MockPrinter::GetBitmapChecksum(size_t page, std::string* checksum) const { 164 bool MockPrinter::GetBitmapChecksum(size_t page, std::string* checksum) const {
163 if (printer_status_ != PRINTER_READY || page >= pages_.size()) 165 if (printer_status_ != PRINTER_READY || page >= pages_.size())
164 return false; 166 return false;
165 return GetChecksum(pages_[page]->bitmap_data(), pages_[page]->bitmap_size(), 167 *checksum = pages_[page]->image().checksum();
166 checksum);
167 }
168
169 bool MockPrinter::GetBitmap(size_t page,
170 const void** data,
171 size_t* size) const {
172 if (printer_status_ != PRINTER_READY || page >= pages_.size())
173 return false;
174 *data = pages_[page]->bitmap_data();
175 *size = pages_[page]->bitmap_size();
176 return true; 168 return true;
177 } 169 }
178 170
179 bool MockPrinter::SaveSource(size_t page, 171 bool MockPrinter::SaveSource(size_t page,
180 const std::wstring& filename) const { 172 const std::wstring& filename) const {
181 if (printer_status_ != PRINTER_READY || page >= pages_.size()) 173 if (printer_status_ != PRINTER_READY || page >= pages_.size())
182 return false; 174 return false;
183 const uint8* source_data = pages_[page]->source_data(); 175 const uint8* source_data = pages_[page]->source_data();
184 size_t source_size = pages_[page]->source_size(); 176 size_t source_size = pages_[page]->source_size();
185 file_util::WriteFile(filename, reinterpret_cast<const char*>(source_data), 177 file_util::WriteFile(filename, reinterpret_cast<const char*>(source_data),
186 source_size); 178 source_size);
187 return true; 179 return true;
188 } 180 }
189 181
190 bool MockPrinter::SaveBitmap(size_t page, 182 bool MockPrinter::SaveBitmap(size_t page,
191 const std::wstring& filename) const { 183 const std::wstring& filename) const {
192 if (printer_status_ != PRINTER_READY || page >= pages_.size()) 184 if (printer_status_ != PRINTER_READY || page >= pages_.size())
193 return false; 185 return false;
194 int width = pages_[page]->width(); 186
195 int height = pages_[page]->height(); 187 pages_[page]->image().SaveToPng(filename);
196 int row_byte_width = width * 4;
197 const uint8* bitmap_data = pages_[page]->bitmap_data();
198 std::vector<unsigned char> compressed;
199 PNGEncoder::Encode(bitmap_data,
200 PNGEncoder::FORMAT_BGRA, width, height,
201 row_byte_width, true, &compressed);
202 file_util::WriteFile(filename,
203 reinterpret_cast<char*>(&*compressed.begin()),
204 compressed.size());
205 return true; 188 return true;
206 } 189 }
207 190
208 int MockPrinter::CreateDocumentCookie() { 191 int MockPrinter::CreateDocumentCookie() {
209 return ++current_document_cookie_; 192 return ++current_document_cookie_;
210 } 193 }
211 194
212 bool MockPrinter::GetChecksum(const void* data,
213 size_t size,
214 std::string* checksum) const {
215 MD5Digest digest;
216 MD5Sum(data, size, &digest);
217 checksum->assign(HexEncode(&digest, sizeof(digest)));
218 return true;
219 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698