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

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

Issue 8564040: Revert 110035 - Print Preview: Making margin selection sticky (part 2/2) (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: Created 9 years, 1 month 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) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 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 * Creates a Margins object that holds four margin values. The units in which 9 * Creates a Margins object that holds four margin values. The units in which
10 * the values are expressed can be any numeric value. 10 * the values are expressed can be any numeric value.
(...skipping 22 matching lines...) Expand all
33 Math.pow(10, precision); 33 Math.pow(10, precision);
34 } 34 }
35 35
36 Margins.prototype = { 36 Margins.prototype = {
37 /** 37 /**
38 * Checks if |rhs| is equal to |this|. 38 * Checks if |rhs| is equal to |this|.
39 * @param {Margins} rhs The Margins object to compare against. 39 * @param {Margins} rhs The Margins object to compare against.
40 * @return {boolean} true if they are equal. 40 * @return {boolean} true if they are equal.
41 */ 41 */
42 isEqual: function(rhs) { 42 isEqual: function(rhs) {
43 if (!rhs)
44 return false;
45 return this[MarginSettings.TOP_GROUP] === rhs[MarginSettings.TOP_GROUP] && 43 return this[MarginSettings.TOP_GROUP] === rhs[MarginSettings.TOP_GROUP] &&
46 this[MarginSettings.LEFT_GROUP] === rhs[MarginSettings.LEFT_GROUP] && 44 this[MarginSettings.LEFT_GROUP] === rhs[MarginSettings.LEFT_GROUP] &&
47 this[MarginSettings.RIGHT_GROUP] === 45 this[MarginSettings.RIGHT_GROUP] ===
48 rhs[MarginSettings.RIGHT_GROUP] && 46 rhs[MarginSettings.RIGHT_GROUP] &&
49 this[MarginSettings.BOTTOM_GROUP] === 47 this[MarginSettings.BOTTOM_GROUP] ===
50 rhs[MarginSettings.BOTTOM_GROUP]; 48 rhs[MarginSettings.BOTTOM_GROUP];
51 }, 49 },
52 50
53 clone: function() { 51 /**
54 return new Margins(this[MarginSettings.TOP_GROUP], 52 * Copies the four margin values from |rhs|.
55 this[MarginSettings.LEFT_GROUP], 53 * @param {Margins} rhs The Margins object values to be used.
56 this[MarginSettings.RIGHT_GROUP], 54 */
57 this[MarginSettings.BOTTOM_GROUP]); 55 copy: function(rhs) {
56 this[MarginSettings.TOP_GROUP] = rhs[MarginSettings.TOP_GROUP];
57 this[MarginSettings.LEFT_GROUP] = rhs[MarginSettings.LEFT_GROUP];
58 this[MarginSettings.RIGHT_GROUP] = rhs[MarginSettings.RIGHT_GROUP];
59 this[MarginSettings.BOTTOM_GROUP] = rhs[MarginSettings.BOTTOM_GROUP];
58 }, 60 },
59 61
60 /** 62 /**
61 * Helper method returning an array of the string indices used for accessing 63 * Helper method returning an array of the string indices used for accessing
62 * all margins. 64 * all margins.
63 * @return {array} An array of string indices. 65 * @return {array} An array of string indices.
64 * @private 66 * @private
65 */ 67 */
66 indicesAsArray_: function() { 68 indicesAsArray_: function() {
67 return [MarginSettings.LEFT_GROUP, MarginSettings.TOP_GROUP, 69 return [MarginSettings.LEFT_GROUP, MarginSettings.TOP_GROUP,
(...skipping 16 matching lines...) Expand all
84 }; 86 };
85 87
86 /** 88 /**
87 * @constructor 89 * @constructor
88 * Class describing the layout of the page. 90 * Class describing the layout of the page.
89 */ 91 */
90 function PageLayout(width, height, left, top, right, bottom) { 92 function PageLayout(width, height, left, top, right, bottom) {
91 this.contentWidth_ = width; 93 this.contentWidth_ = width;
92 this.contentHeight_ = height; 94 this.contentHeight_ = height;
93 this.margins_ = new Margins(left, top, right, bottom); 95 this.margins_ = new Margins(left, top, right, bottom);
94 this.margins_.roundToLocaleUnits();
95 } 96 }
96 97
97 PageLayout.prototype = { 98 PageLayout.prototype = {
98 /** 99 /**
99 * @type {number} The width of the page. 100 * @type {number} The width of the page.
100 */ 101 */
101 get pageWidth() { 102 get pageWidth() {
102 return this.margins_.left + this.margins_.right + this.contentWidth_; 103 return this.margins_.left + this.margins_.right + this.contentWidth_;
103 }, 104 },
104 105
105 /** 106 /**
106 * @type {number} The height of the page. 107 * @type {number} The height of the page.
107 */ 108 */
108 get pageHeight() { 109 get pageHeight() {
109 return this.margins_.top + this.margins_.bottom + this.contentHeight_; 110 return this.margins_.top + this.margins_.bottom + this.contentHeight_;
110 } 111 }
111 }; 112 };
112 113
113 /** 114 /**
114 * Creates a MarginSettings object. This object encapsulates all settings and 115 * Creates a MarginSettings object. This object encapsulates all settings and
115 * logic related to the margins mode. 116 * logic related to the margins mode.
116 * @constructor 117 * @constructor
117 */ 118 */
118 function MarginSettings() { 119 function MarginSettings() {
119 this.marginsOption_ = $('margins-option'); 120 this.marginsOption_ = $('margins-option');
120 this.marginList_ = $('margin-list'); 121 this.marginList_ = $('margin-list');
121 this.marginsUI_ = null; 122 this.marginsUI_ = null;
122 123
123 // Holds the custom margin values in points (if set). 124 // Holds the custom margin values in points (if set).
124 this.customMargins_ = null; 125 this.customMargins_ = new Margins(-1, -1, -1, -1);
125 // Holds the previous custom margin values in points. 126 // Holds the previous custom margin values in points.
126 this.previousCustomMargins_ = null; 127 this.previousCustomMargins_ = new Margins(-1, -1, -1, -1);
127 // Holds the width of the page in points. 128 // Holds the width of the page in points.
128 this.pageWidth_ = -1; 129 this.pageWidth_ = -1;
129 // Holds the height of the page in points. 130 // Holds the height of the page in points.
130 this.pageHeight_ = -1; 131 this.pageHeight_ = -1;
131 // @type {boolean} True if the margins UI should be diplayed when the next 132 // The last selected margin option.
132 // |customEvents.PDF_LOADED| event occurs. 133 this.lastSelectedOption_ = MarginSettings.MARGINS_VALUE_DEFAULT;
133 this.forceMarginsUIOnPDFLoad_ = false; 134
134 // Holds the currently updated default page layout values. 135 // Holds the currently updated default page layout values.
135 this.currentDefaultPageLayout = null; 136 this.currentDefaultPageLayout = null;
137 // Holds the default page layout values when the custom margins was last
138 // selected.
139 this.previousDefaultPageLayout_ = null;
136 140
137 // True if the margins UI should be shown regardless of mouse position. 141 // True if the margins UI should be shown regardless of mouse position.
138 this.forceDisplayingMarginLines_ = true; 142 this.forceDisplayingMarginLines_ = true;
139 143
140 // @type {EventTracker} Used to keep track of certain event listeners. 144 // @type {EventTracker} Used to keep track of certain event listeners.
141 this.eventTracker_ = new EventTracker(); 145 this.eventTracker_ = new EventTracker();
142 146
143 this.addEventListeners_(); 147 this.addEventListeners_();
144 } 148 }
145 149
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
192 get customMargins() { 196 get customMargins() {
193 var margins = {}; 197 var margins = {};
194 margins.marginLeft = this.customMargins_.left; 198 margins.marginLeft = this.customMargins_.left;
195 margins.marginTop = this.customMargins_.top; 199 margins.marginTop = this.customMargins_.top;
196 margins.marginRight = this.customMargins_.right; 200 margins.marginRight = this.customMargins_.right;
197 margins.marginBottom = this.customMargins_.bottom; 201 margins.marginBottom = this.customMargins_.bottom;
198 return margins; 202 return margins;
199 }, 203 },
200 204
201 /** 205 /**
202 * Sets |this.customMargins_| according to |margins|.
203 * @param {{marginLeft: number, marginTop: number, marginRight: number,
204 * marginBottom: number}} margins An object holding the four margin
205 * values.
206 */
207 set customMargins(margins) {
208 this.customMargins_.left = margins.marginLeft;
209 this.customMargins_.top = margins.marginTop;
210 this.customMargins_.right = margins.marginRight;
211 this.customMargins_.bottom = margins.marginBottom;
212 },
213
214 /**
215 * @return {number} The value of the selected margin option. 206 * @return {number} The value of the selected margin option.
216 */ 207 */
217 get selectedMarginsValue() { 208 get selectedMarginsValue() {
218 var val = this.marginList_.options[this.marginList_.selectedIndex].value; 209 var val = this.marginList_.options[this.marginList_.selectedIndex].value;
219 return parseInt(val, 10); 210 return parseInt(val, 10);
220 }, 211 },
221 212
222 /** 213 /**
223 * Sets the current margin selection to |lastUsedMarginType|. 214 * Sets the current margin selection to |lastUsedMarginsType|.
224 * @param {number} lastUsedMarginType An integer value identifying a margin 215 * @param {number} lastUsedMarginsType An integer value identifying a margin
225 * type according to MarginType enum in printing/print_job_constants.h. 216 * type according to MarginType enum in printing/print_job_constants.h.
226 * @param {Object} lastUsedCustomMargins The last used custom margins. If
227 * custom margins have not been used before
228 * |margin{Top|Bottom|Left|Right}| attributes are missing.
229 */ 217 */
230 setLastUsedMargins: function(lastUsedMarginsSettings) { 218 setLastUsedMarginsType: function(lastUsedMarginsType) {
231 var lastUsedMarginsType = lastUsedMarginsSettings['marginsType']
232 this.forceMarginsUIOnPDFLoad_ =
233 lastUsedMarginsType == MarginSettings.MARGINS_VALUE_CUSTOM;
234 this.marginList_.selectedIndex = 219 this.marginList_.selectedIndex =
235 this.getMarginOptionIndexByValue_(lastUsedMarginsType); 220 this.getMarginOptionIndexByValue_(lastUsedMarginsType);
236 if (lastUsedMarginsSettings.hasOwnProperty('marginTop') &&
237 lastUsedMarginsSettings.hasOwnProperty('marginBottom') &&
238 lastUsedMarginsSettings.hasOwnProperty('marginRight') &&
239 lastUsedMarginsSettings.hasOwnProperty('marginLeft')) {
240 this.customMargins_ = new Margins(-1, -1, -1 , -1);
241 this.customMargins = lastUsedMarginsSettings;
242 }
243 }, 221 },
244 222
245 /** 223 /**
246 * @return {number} The total width of the plugin in points. 224 * @return {number} The total width of the plugin in points.
247 */ 225 */
248 get totalWidthInPoints() { 226 get totalWidthInPoints() {
249 var pageInformation = previewArea.pageLocationNormalized; 227 var pageInformation = previewArea.pageLocationNormalized;
250 return this.pageWidth_ / pageInformation.width; 228 return this.pageWidth_ / pageInformation.width;
251 }, 229 },
252 230
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
305 }, 283 },
306 284
307 /** 285 /**
308 * If the custom margin values have changed then request a new preview based 286 * If the custom margin values have changed then request a new preview based
309 * on the newly set margins. 287 * on the newly set margins.
310 * @private 288 * @private
311 */ 289 */
312 requestPreviewIfNeeded_: function() { 290 requestPreviewIfNeeded_: function() {
313 if (!this.areMarginSettingsValid()) 291 if (!this.areMarginSettingsValid())
314 return; 292 return;
315
316 if (this.customMargins_.isEqual(this.previousCustomMargins_)) 293 if (this.customMargins_.isEqual(this.previousCustomMargins_))
317 return; 294 return;
318 295 this.previousCustomMargins_.copy(this.customMargins_);
319 this.previousCustomMargins_ = this.customMargins_.clone();
320 setDefaultValuesAndRegeneratePreview(false); 296 setDefaultValuesAndRegeneratePreview(false);
321 }, 297 },
322 298
323 /** 299 /**
324 * Listener executed when the mouse is over the sidebar. If the custom 300 * Listener executed when the mouse is over the sidebar. If the custom
325 * margin lines are displayed, then, it fades them out. 301 * margin lines are displayed, then, it fades them out.
326 * @private 302 * @private
327 */ 303 */
328 onSidebarMouseOver_: function(e) { 304 onSidebarMouseOver_: function(e) {
329 $('mainview').onmouseover = this.onMainviewMouseOver_.bind(this);
330 $('navbar-container').onmouseover = null;
331 if (!this.forceDisplayingMarginLines_) 305 if (!this.forceDisplayingMarginLines_)
332 this.marginsUI.hide(false); 306 this.marginsUI.hide(false);
333 }, 307 },
334 308
335 /** 309 /**
336 * Listener executed when the mouse is over the main view. If the custom 310 * Listener executed when the mouse is over the main view. If the custom
337 * margin lines are hidden, then, it fades them in. 311 * margin lines are hidden, then, it fades them in.
338 * @private 312 * @private
339 */ 313 */
340 onMainviewMouseOver_: function() { 314 onMainviewMouseOver_: function() {
341 $('mainview').onmouseover = null;
342 $('navbar-container').onmouseover = this.onSidebarMouseOver_.bind(this);
343 this.forceDisplayingMarginLines_ = false; 315 this.forceDisplayingMarginLines_ = false;
344 this.marginsUI.show(); 316 this.marginsUI.show();
345 }, 317 },
346 318
347 /** 319 /**
348 * Adds listeners to all margin related controls. 320 * Adds listeners to all margin related controls.
349 * @private 321 * @private
350 */ 322 */
351 addEventListeners_: function() { 323 addEventListeners_: function() {
352 this.marginList_.onchange = this.onMarginsChanged_.bind(this); 324 this.marginList_.onchange = this.onMarginsChanged_.bind(this);
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
389 return dragDelta * this.totalHeightInPoints; 361 return dragDelta * this.totalHeightInPoints;
390 } else { 362 } else {
391 return dragDelta * this.totalWidthInPoints; 363 return dragDelta * this.totalWidthInPoints;
392 } 364 }
393 }, 365 },
394 366
395 /** 367 /**
396 * @return {boolean} True if the margin settings are valid. 368 * @return {boolean} True if the margin settings are valid.
397 */ 369 */
398 areMarginSettingsValid: function() { 370 areMarginSettingsValid: function() {
399 if (!this.isCustomMarginsSelected() || !this.marginsUI_) 371 if (this.marginsUI_ == null)
400 return true; 372 return true;
401 373
402 var pairs = this.marginsUI.pairsAsList; 374 var pairs = this.marginsUI.pairsAsList;
403 return pairs.every(function(pair) { return pair.box_.isValid; }); 375 return pairs.every(function(pair) { return pair.box_.isValid; });
404 }, 376 },
405 377
406 /** 378 /**
407 * Calculates the maximum allowable value of the selected margin text for 379 * Calculates the maximum allowable value of the selected margin text for
408 * every margin. 380 * every margin.
409 * @return {array} The maximum allowable value in points in order top, left, 381 * @return {array} The maximum allowable value in points in order top, left,
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after
495 false); 467 false);
496 this.eventTracker_.add(document, customEvents.MARGIN_TEXTBOX_FOCUSED, 468 this.eventTracker_.add(document, customEvents.MARGIN_TEXTBOX_FOCUSED,
497 this.onMarginTextboxFocused_.bind(this), false); 469 this.onMarginTextboxFocused_.bind(this), false);
498 }, 470 },
499 471
500 /** 472 /**
501 * Removes the event listeners associated with the custom margins option. 473 * Removes the event listeners associated with the custom margins option.
502 * @private 474 * @private
503 */ 475 */
504 removeCustomMarginEventListeners_: function() { 476 removeCustomMarginEventListeners_: function() {
505 if (!this.marginsUI_)
506 return;
507 $('mainview').onmouseover = null; 477 $('mainview').onmouseover = null;
508 $('navbar-container').onmouseover = null; 478 $('navbar-container').onmouseover = null;
509 this.eventTracker_.remove(this.marginsUI, customEvents.MARGIN_LINE_DRAG); 479 this.eventTracker_.remove(this.marginsUI, customEvents.MARGIN_LINE_DRAG);
510 this.eventTracker_.remove(document, customEvents.MARGIN_TEXTBOX_FOCUSED); 480 this.eventTracker_.remove(document, customEvents.MARGIN_TEXTBOX_FOCUSED);
511 this.marginsUI.hide(true); 481 this.marginsUI.hide(true);
512 }, 482 },
513 483
514 /** 484 /**
515 * Updates |this.marginsUI| depending on the specified margins and the 485 * Updates |this.marginsUI| depending on the specified margins and the
516 * position of the page within the plugin. 486 * position of the page within the plugin.
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
555 * Executes when user selects a different margin option, ie, 525 * Executes when user selects a different margin option, ie,
556 * |this.marginList_.selectedIndex| is changed. 526 * |this.marginList_.selectedIndex| is changed.
557 * @private 527 * @private
558 */ 528 */
559 onMarginsChanged_: function() { 529 onMarginsChanged_: function() {
560 if (this.isDefaultMarginsSelected() || this.isMinimumMarginsSelected() || 530 if (this.isDefaultMarginsSelected() || this.isMinimumMarginsSelected() ||
561 this.isNoMarginsSelected()) 531 this.isNoMarginsSelected())
562 this.onDefaultMinimumNoMarginsSelected_(); 532 this.onDefaultMinimumNoMarginsSelected_();
563 else if (this.isCustomMarginsSelected()) 533 else if (this.isCustomMarginsSelected())
564 this.onCustomMarginsSelected_(); 534 this.onCustomMarginsSelected_();
535
536 this.lastSelectedOption_ = this.selectedMarginsValue;
565 }, 537 },
566 538
567 /** 539 /**
568 * Executes when the default or minimum or no margins option is selected. 540 * Executes when the default or minimum or no margins option is selected.
569 * @private 541 * @private
570 */ 542 */
571 onDefaultMinimumNoMarginsSelected_: function() { 543 onDefaultMinimumNoMarginsSelected_: function() {
572 this.removeCustomMarginEventListeners_(); 544 this.removeCustomMarginEventListeners_();
573 this.forceDisplayingMarginLines_ = true; 545 this.forceDisplayingMarginLines_ = true;
574 this.previousCustomMargins_ = null;
575 setDefaultValuesAndRegeneratePreview(false); 546 setDefaultValuesAndRegeneratePreview(false);
576 }, 547 },
577 548
578 /** 549 /**
579 * Executes when the custom margins option is selected. 550 * Executes when the custom margins option is selected.
580 * @private 551 * @private
581 */ 552 */
582 onCustomMarginsSelected_: function() { 553 onCustomMarginsSelected_: function() {
583 var customMarginsNotSpecified = !this.customMargins_; 554 this.addCustomMarginEventListeners_();
584 this.updatePageData_();
585 555
586 if (customMarginsNotSpecified) { 556 this.customMargins_ = this.currentDefaultPageLayout.margins_;
587 this.previousCustomMargins_ = this.customMargins_.clone(); 557 this.customMargins_.roundToLocaleUnits();
588 this.drawCustomMarginsUI_(); 558 this.previousCustomMargins_.copy(this.customMargins_);
589 this.addCustomMarginEventListeners_(); 559
590 this.marginsUI.show(); 560 if (this.previousDefaultPageLayout_ != this.currentDefaultPageLayout) {
591 } else { 561 this.pageWidth_ = this.currentDefaultPageLayout.pageWidth;
592 this.forceMarginsUIOnPDFLoad_ = true; 562 this.pageHeight_ = this.currentDefaultPageLayout.pageHeight;
593 this.requestPreviewIfNeeded_();
594 } 563 }
564
565 this.previousDefaultPageLayout_ = this.currentDefaultPageLayout;
566 this.drawCustomMarginsUI_();
567 this.marginsUI.show();
595 }, 568 },
596 569
597 /** 570 /**
598 * Calculates the coordinates of the four margin lines. These are the 571 * Calculates the coordinates of the four margin lines. These are the
599 * coordinates where the margin lines should be displayed. The coordinates 572 * coordinates where the margin lines should be displayed. The coordinates
600 * are expressed in terms of percentages with respect to the total width 573 * are expressed in terms of percentages with respect to the total width
601 * and height of the plugin. 574 * and height of the plugin.
602 * @return {print_preview.Rect} A rectnangle that describes the position of 575 * @return {print_preview.Rect} A rectnangle that describes the position of
603 * the four margin lines. 576 * the four margin lines.
604 * @private 577 * @private
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
647 * If custom margins is the currently selected option then change to the 620 * If custom margins is the currently selected option then change to the
648 * default margins option. 621 * default margins option.
649 * @private 622 * @private
650 */ 623 */
651 resetMarginsIfNeeded: function() { 624 resetMarginsIfNeeded: function() {
652 if (this.isCustomMarginsSelected()) { 625 if (this.isCustomMarginsSelected()) {
653 this.marginList_.options[ 626 this.marginList_.options[
654 MarginSettings.OPTION_INDEX_DEFAULT].selected = true; 627 MarginSettings.OPTION_INDEX_DEFAULT].selected = true;
655 this.removeCustomMarginEventListeners_(); 628 this.removeCustomMarginEventListeners_();
656 this.forceDisplayingMarginLines_ = true; 629 this.forceDisplayingMarginLines_ = true;
657 this.customMargins_ = null; 630 this.lastSelectedOption_ = MarginSettings.MARGINS_VALUE_DEFAULT;
658 this.previousCustomMargins_ = null;
659 } 631 }
660 }, 632 },
661 633
662 /** 634 /**
663 * Executes when a |customEvents.PDF_LOADED| event occurs. 635 * Executes when a |customEvents.PDF_LOADED| event occurs.
664 * @private 636 * @private
665 */ 637 */
666 onPDFLoaded_: function() { 638 onPDFLoaded_: function() {
667 if (!previewModifiable) { 639 if (!previewModifiable)
668 fadeOutOption(this.marginsOption_); 640 fadeOutOption(this.marginsOption_);
669 return;
670 }
671
672 if (this.forceMarginsUIOnPDFLoad_) {
673 this.updatePageData_();
674 this.drawCustomMarginsUI_();
675 this.addCustomMarginEventListeners_();
676 this.marginsUI.show();
677 this.forceMarginsUIOnPDFLoad_ = false;
678 }
679 },
680
681 /**
682 * Updates |this.customMargins_|, |this.pageWidth_|, |this.pageHeight_|.
683 * @private
684 */
685 updatePageData_: function() {
686 if (!this.customMargins_)
687 this.customMargins_ = this.currentDefaultPageLayout.margins_.clone();
688
689 this.pageWidth_ = this.currentDefaultPageLayout.pageWidth;
690 this.pageHeight_ = this.currentDefaultPageLayout.pageHeight;
691 } 641 }
692 }; 642 };
693 643
694 return { 644 return {
695 MarginSettings: MarginSettings, 645 MarginSettings: MarginSettings,
696 PageLayout: PageLayout, 646 PageLayout: PageLayout,
647 setNumberFormatAndMeasurementSystem:
648 MarginSettings.setNumberFormatAndMeasurementSystem,
697 }; 649 };
698 }); 650 });
OLDNEW
« no previous file with comments | « chrome/browser/printing/print_system_task_proxy.cc ('k') | chrome/browser/resources/print_preview/print_preview.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698