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

Side by Side Diff: chrome/browser/resources/print_preview/preview_generator.js

Issue 2833993004: Print Preview: Make generate draft mode work again. (Closed)
Patch Set: rebase Created 3 years, 8 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
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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 cr.define('print_preview', function() { 5 cr.define('print_preview', function() {
6 'use strict'; 6 'use strict';
7 7
8 /** 8 /**
9 * Interface to the Chromium print preview generator. 9 * Interface to the Chromium print preview generator.
10 * @param {!print_preview.DestinationStore} destinationStore Used to get the 10 * @param {!print_preview.DestinationStore} destinationStore Used to get the
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
51 51
52 /** 52 /**
53 * ID of current in-flight request. Requests that do not share this ID will 53 * ID of current in-flight request. Requests that do not share this ID will
54 * be ignored. 54 * be ignored.
55 * @type {number} 55 * @type {number}
56 * @private 56 * @private
57 */ 57 */
58 this.inFlightRequestId_ = -1; 58 this.inFlightRequestId_ = -1;
59 59
60 /** 60 /**
61 * Whether the current in flight request requires generating draft pages for
62 * print preview. This is true only for modifiable documents when the print
63 * settings has changed sufficiently to require re-rendering.
64 * @type {boolean}
dpapad 2017/04/22 01:32:49 Nit: @private {boolean}
Lei Zhang 2017/04/28 01:38:08 Done.
65 * @private
66 */
67 this.generateDraft_ = false;
68
69 /**
61 * Media size to generate preview with. {@code null} indicates default size. 70 * Media size to generate preview with. {@code null} indicates default size.
62 * @type {cp.cdd.MediaSizeTicketItem} 71 * @type {cp.cdd.MediaSizeTicketItem}
63 * @private 72 * @private
64 */ 73 */
65 this.mediaSize_ = null; 74 this.mediaSize_ = null;
66 75
67 /** 76 /**
68 * Whether the previews are being generated in landscape mode. 77 * Whether the previews are being generated in landscape mode.
69 * @type {boolean} 78 * @type {boolean}
70 * @private 79 * @private
(...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after
166 * Request that new preview be generated. A preview request will not be 175 * Request that new preview be generated. A preview request will not be
167 * generated if the print ticket has not changed sufficiently. 176 * generated if the print ticket has not changed sufficiently.
168 * @return {boolean} Whether a new preview was actually requested. 177 * @return {boolean} Whether a new preview was actually requested.
169 */ 178 */
170 requestPreview: function() { 179 requestPreview: function() {
171 if (!this.printTicketStore_.isTicketValidForPreview() || 180 if (!this.printTicketStore_.isTicketValidForPreview() ||
172 !this.printTicketStore_.isInitialized || 181 !this.printTicketStore_.isInitialized ||
173 !this.destinationStore_.selectedDestination) { 182 !this.destinationStore_.selectedDestination) {
174 return false; 183 return false;
175 } 184 }
176 if (!this.hasPreviewChanged_()) { 185 var previewChanged = this.hasPreviewChanged_();
186 if (!previewChanged && !this.hasPreviewPageRangeChanged_()) {
177 // Changes to these ticket items might not trigger a new preview, but 187 // Changes to these ticket items might not trigger a new preview, but
178 // they still need to be recorded. 188 // they still need to be recorded.
179 this.marginsType_ = this.printTicketStore_.marginsType.getValue(); 189 this.marginsType_ = this.printTicketStore_.marginsType.getValue();
180 return false; 190 return false;
181 } 191 }
182 this.mediaSize_ = this.printTicketStore_.mediaSize.getValue(); 192 this.mediaSize_ = this.printTicketStore_.mediaSize.getValue();
183 this.isLandscapeEnabled_ = this.printTicketStore_.landscape.getValue(); 193 this.isLandscapeEnabled_ = this.printTicketStore_.landscape.getValue();
184 this.isHeaderFooterEnabled_ = 194 this.isHeaderFooterEnabled_ =
185 this.printTicketStore_.headerFooter.getValue(); 195 this.printTicketStore_.headerFooter.getValue();
186 this.colorValue_ = this.printTicketStore_.color.getValue(); 196 this.colorValue_ = this.printTicketStore_.color.getValue();
187 this.isFitToPageEnabled_ = this.printTicketStore_.fitToPage.getValue(); 197 this.isFitToPageEnabled_ = this.printTicketStore_.fitToPage.getValue();
188 this.scalingValue_ = this.printTicketStore_.scaling.getValueAsNumber(); 198 this.scalingValue_ = this.printTicketStore_.scaling.getValueAsNumber();
189 this.pageRanges_ = this.printTicketStore_.pageRange.getPageRanges(); 199 this.pageRanges_ = this.printTicketStore_.pageRange.getPageRanges();
190 this.marginsType_ = this.printTicketStore_.marginsType.getValue(); 200 this.marginsType_ = this.printTicketStore_.marginsType.getValue();
191 this.isCssBackgroundEnabled_ = 201 this.isCssBackgroundEnabled_ =
192 this.printTicketStore_.cssBackground.getValue(); 202 this.printTicketStore_.cssBackground.getValue();
193 this.isSelectionOnlyEnabled_ = 203 this.isSelectionOnlyEnabled_ =
194 this.printTicketStore_.selectionOnly.getValue(); 204 this.printTicketStore_.selectionOnly.getValue();
195 this.selectedDestination_ = this.destinationStore_.selectedDestination; 205 this.selectedDestination_ = this.destinationStore_.selectedDestination;
196 206
197 this.inFlightRequestId_++; 207 this.inFlightRequestId_++;
208 this.generateDraft_ = this.documentInfo_.isModifiable && previewChanged;
198 this.nativeLayer_.startGetPreview( 209 this.nativeLayer_.startGetPreview(
199 this.destinationStore_.selectedDestination, 210 this.destinationStore_.selectedDestination,
200 this.printTicketStore_, 211 this.printTicketStore_,
201 this.documentInfo_, 212 this.documentInfo_,
213 this.generateDraft_,
202 this.inFlightRequestId_); 214 this.inFlightRequestId_);
203 return true; 215 return true;
204 }, 216 },
205 217
206 /** Removes all event listeners that the preview generator has attached. */ 218 /** Removes all event listeners that the preview generator has attached. */
207 removeEventListeners: function() { 219 removeEventListeners: function() {
208 this.tracker_.removeAll(); 220 this.tracker_.removeAll();
209 }, 221 },
210 222
211 /** 223 /**
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
266 PreviewGenerator.EventType.PREVIEW_START); 278 PreviewGenerator.EventType.PREVIEW_START);
267 if (!this.documentInfo_.isModifiable) { 279 if (!this.documentInfo_.isModifiable) {
268 index = -1; 280 index = -1;
269 } 281 }
270 previewStartEvent.previewUrl = 'chrome://print/' + 282 previewStartEvent.previewUrl = 'chrome://print/' +
271 previewUid.toString() + '/' + index + '/print.pdf'; 283 previewUid.toString() + '/' + index + '/print.pdf';
272 this.dispatchEvent(previewStartEvent); 284 this.dispatchEvent(previewStartEvent);
273 }, 285 },
274 286
275 /** 287 /**
276 * @return {boolean} Whether the print ticket has changed sufficiently to 288 * @return {boolean} Whether the print ticket, excluding the page range, has
277 * determine whether a new preview request should be issued. 289 * changed sufficiently to determine whether a new preview request
290 * should be issued.
278 * @private 291 * @private
279 */ 292 */
280 hasPreviewChanged_: function() { 293 hasPreviewChanged_: function() {
281 var ticketStore = this.printTicketStore_; 294 var ticketStore = this.printTicketStore_;
282 return this.inFlightRequestId_ == -1 || 295 return this.inFlightRequestId_ == -1 ||
283 !ticketStore.mediaSize.isValueEqual(this.mediaSize_) || 296 !ticketStore.mediaSize.isValueEqual(this.mediaSize_) ||
284 !ticketStore.landscape.isValueEqual(this.isLandscapeEnabled_) || 297 !ticketStore.landscape.isValueEqual(this.isLandscapeEnabled_) ||
285 !ticketStore.headerFooter.isValueEqual(this.isHeaderFooterEnabled_) || 298 !ticketStore.headerFooter.isValueEqual(this.isHeaderFooterEnabled_) ||
286 !ticketStore.color.isValueEqual(this.colorValue_) || 299 !ticketStore.color.isValueEqual(this.colorValue_) ||
287 !ticketStore.scaling.isValueEqual(this.scalingValue_) || 300 !ticketStore.scaling.isValueEqual(this.scalingValue_) ||
288 !ticketStore.fitToPage.isValueEqual(this.isFitToPageEnabled_) || 301 !ticketStore.fitToPage.isValueEqual(this.isFitToPageEnabled_) ||
289 this.pageRanges_ == null ||
290 !areRangesEqual(ticketStore.pageRange.getPageRanges(),
291 this.pageRanges_) ||
292 (!ticketStore.marginsType.isValueEqual(this.marginsType_) && 302 (!ticketStore.marginsType.isValueEqual(this.marginsType_) &&
293 !ticketStore.marginsType.isValueEqual( 303 !ticketStore.marginsType.isValueEqual(
294 print_preview.ticket_items.MarginsType.Value.CUSTOM)) || 304 print_preview.ticket_items.MarginsType.Value.CUSTOM)) ||
295 (ticketStore.marginsType.isValueEqual( 305 (ticketStore.marginsType.isValueEqual(
296 print_preview.ticket_items.MarginsType.Value.CUSTOM) && 306 print_preview.ticket_items.MarginsType.Value.CUSTOM) &&
297 !ticketStore.customMargins.isValueEqual( 307 !ticketStore.customMargins.isValueEqual(
298 this.documentInfo_.margins)) || 308 this.documentInfo_.margins)) ||
299 !ticketStore.cssBackground.isValueEqual( 309 !ticketStore.cssBackground.isValueEqual(
300 this.isCssBackgroundEnabled_) || 310 this.isCssBackgroundEnabled_) ||
301 !ticketStore.selectionOnly.isValueEqual( 311 !ticketStore.selectionOnly.isValueEqual(
302 this.isSelectionOnlyEnabled_) || 312 this.isSelectionOnlyEnabled_) ||
303 (this.selectedDestination_ != 313 (this.selectedDestination_ !=
304 this.destinationStore_.selectedDestination); 314 this.destinationStore_.selectedDestination);
305 }, 315 },
306 316
307 /** 317 /**
318 * @return {boolean} Whether the page range in the print ticket has changed.
319 * @private
320 */
321 hasPreviewPageRangeChanged_: function() {
322 return this.pageRanges_ == null ||
323 !areRangesEqual(this.printTicketStore_.pageRange.getPageRanges(),
324 this.pageRanges_);
dpapad 2017/04/22 01:32:49 Nit (optional): There used to be a so called "box
Lei Zhang 2017/04/28 01:38:08 Done.
325 },
326
327 /**
308 * Called when the page layout of the document is ready. Always occurs 328 * Called when the page layout of the document is ready. Always occurs
309 * as a result of a preview request. 329 * as a result of a preview request.
310 * @param {Event} event Contains layout info about the document. 330 * @param {Event} event Contains layout info about the document.
311 * @private 331 * @private
312 */ 332 */
313 onPageLayoutReady_: function(event) { 333 onPageLayoutReady_: function(event) {
314 // NOTE: A request ID is not specified, so assuming its for the current 334 // NOTE: A request ID is not specified, so assuming its for the current
315 // in-flight request. 335 // in-flight request.
316 336
317 var origin = new print_preview.Coordinate2d( 337 var origin = new print_preview.Coordinate2d(
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after
380 /** 400 /**
381 * Called when the preview generation is complete. Dispatches a 401 * Called when the preview generation is complete. Dispatches a
382 * DOCUMENT_READY event. 402 * DOCUMENT_READY event.
383 * @param {Event} event Contains the preview UID and response ID. 403 * @param {Event} event Contains the preview UID and response ID.
384 * @private 404 * @private
385 */ 405 */
386 onPreviewGenerationDone_: function(event) { 406 onPreviewGenerationDone_: function(event) {
387 if (this.inFlightRequestId_ != event.previewResponseId) { 407 if (this.inFlightRequestId_ != event.previewResponseId) {
388 return; // Ignore old response. 408 return; // Ignore old response.
389 } 409 }
390 // Dispatch a PREVIEW_START event since non-modifiable documents don't 410 if (!this.generateDraft_) {
391 // trigger PAGE_READY events. 411 // Dispatch a PREVIEW_START event since not generating a draft PDF,
392 if (!this.documentInfo_.isModifiable) { 412 // which includes print preview for non-modifiable documents, does not
413 // trigger PAGE_READY events.
393 this.dispatchPreviewStartEvent_(event.previewUid, 0); 414 this.dispatchPreviewStartEvent_(event.previewUid, 0);
394 } 415 }
395 cr.dispatchSimpleEvent(this, PreviewGenerator.EventType.DOCUMENT_READY); 416 cr.dispatchSimpleEvent(this, PreviewGenerator.EventType.DOCUMENT_READY);
396 }, 417 },
397 418
398 /** 419 /**
399 * Called when the preview generation fails. 420 * Called when the preview generation fails.
400 * @private 421 * @private
401 */ 422 */
402 onPreviewGenerationFail_: function() { 423 onPreviewGenerationFail_: function() {
403 // NOTE: No request ID is returned from Chromium so its assumed its the 424 // NOTE: No request ID is returned from Chromium so its assumed its the
404 // current one. 425 // current one.
405 cr.dispatchSimpleEvent(this, PreviewGenerator.EventType.FAIL); 426 cr.dispatchSimpleEvent(this, PreviewGenerator.EventType.FAIL);
406 } 427 }
407 }; 428 };
408 429
409 // Export 430 // Export
410 return { 431 return {
411 PreviewGenerator: PreviewGenerator 432 PreviewGenerator: PreviewGenerator
412 }; 433 };
413 }); 434 });
OLDNEW
« no previous file with comments | « chrome/browser/resources/print_preview/native_layer.js ('k') | chrome/browser/ui/webui/print_preview/print_preview_handler.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698