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

Side by Side Diff: chrome/browser/resources/pdf/pdf.js

Issue 2939273002: DO NOT SUBMIT: what chrome/browser/resources/ could eventually look like with clang-format (Closed)
Patch Set: Created 3 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 unified diff | Download patch
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 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 'use strict'; 5 'use strict';
6 6
7 /** 7 /**
8 * @return {number} Width of a scrollbar in pixels 8 * @return {number} Width of a scrollbar in pixels
9 */ 9 */
10 function getScrollbarWidth() { 10 function getScrollbarWidth() {
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
44 * an editable element has focus, to allow for proper editing controls. 44 * an editable element has focus, to allow for proper editing controls.
45 * @param {HTMLElement} activeElement The currently selected DOM node. 45 * @param {HTMLElement} activeElement The currently selected DOM node.
46 * @return {boolean} True if keydown events should be ignored. 46 * @return {boolean} True if keydown events should be ignored.
47 */ 47 */
48 function shouldIgnoreKeyEvents(activeElement) { 48 function shouldIgnoreKeyEvents(activeElement) {
49 while (activeElement.shadowRoot != null && 49 while (activeElement.shadowRoot != null &&
50 activeElement.shadowRoot.activeElement != null) { 50 activeElement.shadowRoot.activeElement != null) {
51 activeElement = activeElement.shadowRoot.activeElement; 51 activeElement = activeElement.shadowRoot.activeElement;
52 } 52 }
53 53
54 return (activeElement.isContentEditable || 54 return (
55 activeElement.tagName == 'INPUT' || 55 activeElement.isContentEditable || activeElement.tagName == 'INPUT' ||
56 activeElement.tagName == 'TEXTAREA'); 56 activeElement.tagName == 'TEXTAREA');
57 } 57 }
58 58
59 /** 59 /**
60 * The minimum number of pixels to offset the toolbar by from the bottom and 60 * The minimum number of pixels to offset the toolbar by from the bottom and
61 * right side of the screen. 61 * right side of the screen.
62 */ 62 */
63 PDFViewer.MIN_TOOLBAR_OFFSET = 15; 63 PDFViewer.MIN_TOOLBAR_OFFSET = 15;
64 64
65 /** 65 /**
66 * The height of the toolbar along the top of the page. The document will be 66 * The height of the toolbar along the top of the page. The document will be
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
110 this.paramsParser_.getUiUrlParams(this.originalUrl_).toolbar && 110 this.paramsParser_.getUiUrlParams(this.originalUrl_).toolbar &&
111 !this.isPrintPreview_; 111 !this.isPrintPreview_;
112 112
113 // The sizer element is placed behind the plugin element to cause scrollbars 113 // The sizer element is placed behind the plugin element to cause scrollbars
114 // to be displayed in the window. It is sized according to the document size 114 // to be displayed in the window. It is sized according to the document size
115 // of the pdf and zoom level. 115 // of the pdf and zoom level.
116 this.sizer_ = $('sizer'); 116 this.sizer_ = $('sizer');
117 if (this.isPrintPreview_) 117 if (this.isPrintPreview_)
118 this.pageIndicator_ = $('page-indicator'); 118 this.pageIndicator_ = $('page-indicator');
119 this.passwordScreen_ = $('password-screen'); 119 this.passwordScreen_ = $('password-screen');
120 this.passwordScreen_.addEventListener('password-submitted', 120 this.passwordScreen_.addEventListener(
121 this.onPasswordSubmitted_.bind(this)); 121 'password-submitted', this.onPasswordSubmitted_.bind(this));
122 this.errorScreen_ = $('error-screen'); 122 this.errorScreen_ = $('error-screen');
123 // Can only reload if we are in a normal tab. 123 // Can only reload if we are in a normal tab.
124 if (chrome.tabs && this.browserApi_.getStreamInfo().tabId != -1) { 124 if (chrome.tabs && this.browserApi_.getStreamInfo().tabId != -1) {
125 this.errorScreen_.reloadFn = function() { 125 this.errorScreen_.reloadFn = function() {
126 chrome.tabs.reload(this.browserApi_.getStreamInfo().tabId); 126 chrome.tabs.reload(this.browserApi_.getStreamInfo().tabId);
127 }.bind(this); 127 }.bind(this);
128 } 128 }
129 129
130 // Create the viewport. 130 // Create the viewport.
131 var shortWindow = window.innerHeight < PDFViewer.TOOLBAR_WINDOW_MIN_HEIGHT; 131 var shortWindow = window.innerHeight < PDFViewer.TOOLBAR_WINDOW_MIN_HEIGHT;
132 var topToolbarHeight = 132 var topToolbarHeight =
133 (toolbarEnabled) ? PDFViewer.MATERIAL_TOOLBAR_HEIGHT : 0; 133 (toolbarEnabled) ? PDFViewer.MATERIAL_TOOLBAR_HEIGHT : 0;
134 var defaultZoom = 134 var defaultZoom =
135 this.browserApi_.getZoomBehavior() == BrowserApi.ZoomBehavior.MANAGE ? 135 this.browserApi_.getZoomBehavior() == BrowserApi.ZoomBehavior.MANAGE ?
136 this.browserApi_.getDefaultZoom() : 1.0; 136 this.browserApi_.getDefaultZoom() :
137 this.viewport_ = new Viewport(window, 137 1.0;
138 this.sizer_, 138 this.viewport_ = new Viewport(
139 this.viewportChanged_.bind(this), 139 window, this.sizer_, this.viewportChanged_.bind(this),
140 this.beforeZoom_.bind(this), 140 this.beforeZoom_.bind(this), this.afterZoom_.bind(this),
141 this.afterZoom_.bind(this), 141 getScrollbarWidth(), defaultZoom, topToolbarHeight);
142 getScrollbarWidth(),
143 defaultZoom,
144 topToolbarHeight);
145 142
146 // Create the plugin object dynamically so we can set its src. The plugin 143 // Create the plugin object dynamically so we can set its src. The plugin
147 // element is sized to fill the entire window and is set to be fixed 144 // element is sized to fill the entire window and is set to be fixed
148 // positioning, acting as a viewport. The plugin renders into this viewport 145 // positioning, acting as a viewport. The plugin renders into this viewport
149 // according to the scroll position of the window. 146 // according to the scroll position of the window.
150 this.plugin_ = document.createElement('embed'); 147 this.plugin_ = document.createElement('embed');
151 // NOTE: The plugin's 'id' field must be set to 'plugin' since 148 // NOTE: The plugin's 'id' field must be set to 'plugin' since
152 // chrome/renderer/printing/print_web_view_helper.cc actually references it. 149 // chrome/renderer/printing/print_web_view_helper.cc actually references it.
153 this.plugin_.id = 'plugin'; 150 this.plugin_.id = 'plugin';
154 this.plugin_.type = 'application/x-google-chrome-pdf'; 151 this.plugin_.type = 'application/x-google-chrome-pdf';
155 this.plugin_.addEventListener('message', this.handlePluginMessage_.bind(this), 152 this.plugin_.addEventListener(
156 false); 153 'message', this.handlePluginMessage_.bind(this), false);
157 154
158 // Handle scripting messages from outside the extension that wish to interact 155 // Handle scripting messages from outside the extension that wish to interact
159 // with it. We also send a message indicating that extension has loaded and 156 // with it. We also send a message indicating that extension has loaded and
160 // is ready to receive messages. 157 // is ready to receive messages.
161 window.addEventListener('message', this.handleScriptingMessage.bind(this), 158 window.addEventListener(
162 false); 159 'message', this.handleScriptingMessage.bind(this), false);
163 160
164 this.plugin_.setAttribute('src', this.originalUrl_); 161 this.plugin_.setAttribute('src', this.originalUrl_);
165 this.plugin_.setAttribute('stream-url', 162 this.plugin_.setAttribute(
166 this.browserApi_.getStreamInfo().streamUrl); 163 'stream-url', this.browserApi_.getStreamInfo().streamUrl);
167 var headers = ''; 164 var headers = '';
168 for (var header in this.browserApi_.getStreamInfo().responseHeaders) { 165 for (var header in this.browserApi_.getStreamInfo().responseHeaders) {
169 headers += header + ': ' + 166 headers += header + ': ' +
170 this.browserApi_.getStreamInfo().responseHeaders[header] + '\n'; 167 this.browserApi_.getStreamInfo().responseHeaders[header] + '\n';
171 } 168 }
172 this.plugin_.setAttribute('headers', headers); 169 this.plugin_.setAttribute('headers', headers);
173 170
174 var backgroundColor = PDFViewer.DARK_BACKGROUND_COLOR; 171 var backgroundColor = PDFViewer.DARK_BACKGROUND_COLOR;
175 this.plugin_.setAttribute('background-color', backgroundColor); 172 this.plugin_.setAttribute('background-color', backgroundColor);
176 this.plugin_.setAttribute('top-toolbar-height', topToolbarHeight); 173 this.plugin_.setAttribute('top-toolbar-height', topToolbarHeight);
177 174
178 if (this.browserApi_.getStreamInfo().embedded) { 175 if (this.browserApi_.getStreamInfo().embedded) {
179 this.plugin_.setAttribute('top-level-url', 176 this.plugin_.setAttribute(
180 this.browserApi_.getStreamInfo().tabUrl); 177 'top-level-url', this.browserApi_.getStreamInfo().tabUrl);
181 } else { 178 } else {
182 this.plugin_.setAttribute('full-frame', ''); 179 this.plugin_.setAttribute('full-frame', '');
183 } 180 }
184 document.body.appendChild(this.plugin_); 181 document.body.appendChild(this.plugin_);
185 182
186 // Setup the button event listeners. 183 // Setup the button event listeners.
187 this.zoomToolbar_ = $('zoom-toolbar'); 184 this.zoomToolbar_ = $('zoom-toolbar');
188 this.zoomToolbar_.addEventListener('fit-to-width', 185 this.zoomToolbar_.addEventListener(
189 this.viewport_.fitToWidth.bind(this.viewport_)); 186 'fit-to-width', this.viewport_.fitToWidth.bind(this.viewport_));
190 this.zoomToolbar_.addEventListener('fit-to-page', 187 this.zoomToolbar_.addEventListener('fit-to-page', this.fitToPage_.bind(this));
191 this.fitToPage_.bind(this)); 188 this.zoomToolbar_.addEventListener(
192 this.zoomToolbar_.addEventListener('zoom-in', 189 'zoom-in', this.viewport_.zoomIn.bind(this.viewport_));
193 this.viewport_.zoomIn.bind(this.viewport_)); 190 this.zoomToolbar_.addEventListener(
194 this.zoomToolbar_.addEventListener('zoom-out', 191 'zoom-out', this.viewport_.zoomOut.bind(this.viewport_));
195 this.viewport_.zoomOut.bind(this.viewport_));
196 192
197 this.gestureDetector_ = new GestureDetector(this.plugin_); 193 this.gestureDetector_ = new GestureDetector(this.plugin_);
198 this.gestureDetector_.addEventListener( 194 this.gestureDetector_.addEventListener(
199 'pinchstart', this.viewport_.pinchZoomStart.bind(this.viewport_)); 195 'pinchstart', this.viewport_.pinchZoomStart.bind(this.viewport_));
200 this.sentPinchEvent_ = false; 196 this.sentPinchEvent_ = false;
201 this.gestureDetector_.addEventListener( 197 this.gestureDetector_.addEventListener(
202 'pinchupdate', this.onPinchUpdate_.bind(this)); 198 'pinchupdate', this.onPinchUpdate_.bind(this));
203 this.gestureDetector_.addEventListener( 199 this.gestureDetector_.addEventListener(
204 'pinchend', this.onPinchEnd_.bind(this)); 200 'pinchend', this.onPinchEnd_.bind(this));
205 201
206 if (toolbarEnabled) { 202 if (toolbarEnabled) {
207 this.toolbar_ = $('toolbar'); 203 this.toolbar_ = $('toolbar');
208 this.toolbar_.hidden = false; 204 this.toolbar_.hidden = false;
209 this.toolbar_.addEventListener('save', this.save_.bind(this)); 205 this.toolbar_.addEventListener('save', this.save_.bind(this));
210 this.toolbar_.addEventListener('print', this.print_.bind(this)); 206 this.toolbar_.addEventListener('print', this.print_.bind(this));
211 this.toolbar_.addEventListener('rotate-right', 207 this.toolbar_.addEventListener(
212 this.rotateClockwise_.bind(this)); 208 'rotate-right', this.rotateClockwise_.bind(this));
213 // Must attach to mouseup on the plugin element, since it eats mousedown 209 // Must attach to mouseup on the plugin element, since it eats mousedown
214 // and click events. 210 // and click events.
215 this.plugin_.addEventListener('mouseup', 211 this.plugin_.addEventListener(
216 this.toolbar_.hideDropdowns.bind(this.toolbar_)); 212 'mouseup', this.toolbar_.hideDropdowns.bind(this.toolbar_));
217 213
218 this.toolbar_.docTitle = getFilenameFromURL(this.originalUrl_); 214 this.toolbar_.docTitle = getFilenameFromURL(this.originalUrl_);
219 } 215 }
220 216
221 document.body.addEventListener('change-page', function(e) { 217 document.body.addEventListener('change-page', function(e) {
222 this.viewport_.goToPage(e.detail.page); 218 this.viewport_.goToPage(e.detail.page);
223 }.bind(this)); 219 }.bind(this));
224 220
225 document.body.addEventListener('navigate', function(e) { 221 document.body.addEventListener('navigate', function(e) {
226 var disposition = 222 var disposition = e.detail.newtab ?
227 e.detail.newtab ? Navigator.WindowOpenDisposition.NEW_BACKGROUND_TAB : 223 Navigator.WindowOpenDisposition.NEW_BACKGROUND_TAB :
228 Navigator.WindowOpenDisposition.CURRENT_TAB; 224 Navigator.WindowOpenDisposition.CURRENT_TAB;
229 this.navigator_.navigate(e.detail.uri, disposition); 225 this.navigator_.navigate(e.detail.uri, disposition);
230 }.bind(this)); 226 }.bind(this));
231 227
232 this.toolbarManager_ = 228 this.toolbarManager_ =
233 new ToolbarManager(window, this.toolbar_, this.zoomToolbar_); 229 new ToolbarManager(window, this.toolbar_, this.zoomToolbar_);
234 230
235 // Set up the ZoomManager. 231 // Set up the ZoomManager.
236 this.zoomManager_ = ZoomManager.create( 232 this.zoomManager_ = ZoomManager.create(
237 this.browserApi_.getZoomBehavior(), this.viewport_, 233 this.browserApi_.getZoomBehavior(), this.viewport_,
238 this.browserApi_.setZoom.bind(this.browserApi_), 234 this.browserApi_.setZoom.bind(this.browserApi_),
239 this.browserApi_.getInitialZoom()); 235 this.browserApi_.getInitialZoom());
240 this.viewport_.zoomManager = this.zoomManager_; 236 this.viewport_.zoomManager = this.zoomManager_;
241 this.browserApi_.addZoomEventListener( 237 this.browserApi_.addZoomEventListener(
242 this.zoomManager_.onBrowserZoomChange.bind(this.zoomManager_)); 238 this.zoomManager_.onBrowserZoomChange.bind(this.zoomManager_));
243 239
244 // Setup the keyboard event listener. 240 // Setup the keyboard event listener.
245 document.addEventListener('keydown', this.handleKeyEvent_.bind(this)); 241 document.addEventListener('keydown', this.handleKeyEvent_.bind(this));
246 document.addEventListener('mousemove', this.handleMouseEvent_.bind(this)); 242 document.addEventListener('mousemove', this.handleMouseEvent_.bind(this));
247 document.addEventListener('mouseout', this.handleMouseEvent_.bind(this)); 243 document.addEventListener('mouseout', this.handleMouseEvent_.bind(this));
248 document.addEventListener('contextmenu', 244 document.addEventListener(
249 this.handleContextMenuEvent_.bind(this)); 245 'contextmenu', this.handleContextMenuEvent_.bind(this));
250 246
251 var tabId = this.browserApi_.getStreamInfo().tabId; 247 var tabId = this.browserApi_.getStreamInfo().tabId;
252 this.navigator_ = new Navigator( 248 this.navigator_ = new Navigator(
253 this.originalUrl_, this.viewport_, this.paramsParser_, 249 this.originalUrl_, this.viewport_, this.paramsParser_,
254 new NavigatorDelegate(tabId)); 250 new NavigatorDelegate(tabId));
255 this.viewportScroller_ = 251 this.viewportScroller_ =
256 new ViewportScroller(this.viewport_, this.plugin_, window); 252 new ViewportScroller(this.viewport_, this.plugin_, window);
257 253
258 // Request translated strings. 254 // Request translated strings.
259 chrome.resourcesPrivate.getStrings('pdf', this.handleStrings_.bind(this)); 255 chrome.resourcesPrivate.getStrings('pdf', this.handleStrings_.bind(this));
(...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after
358 } 354 }
359 return; 355 return;
360 case 40: // Down arrow key. 356 case 40: // Down arrow key.
361 if (fromScriptingAPI) { 357 if (fromScriptingAPI) {
362 position.y += Viewport.SCROLL_INCREMENT; 358 position.y += Viewport.SCROLL_INCREMENT;
363 this.viewport.position = position; 359 this.viewport.position = position;
364 } 360 }
365 return; 361 return;
366 case 65: // 'a' key. 362 case 65: // 'a' key.
367 if (e.ctrlKey || e.metaKey) { 363 if (e.ctrlKey || e.metaKey) {
368 this.plugin_.postMessage({ 364 this.plugin_.postMessage({type: 'selectAll'});
369 type: 'selectAll'
370 });
371 // Since we do selection ourselves. 365 // Since we do selection ourselves.
372 e.preventDefault(); 366 e.preventDefault();
373 } 367 }
374 return; 368 return;
375 case 71: // 'g' key. 369 case 71: // 'g' key.
376 if (this.toolbar_ && (e.ctrlKey || e.metaKey) && e.altKey) { 370 if (this.toolbar_ && (e.ctrlKey || e.metaKey) && e.altKey) {
377 this.toolbarManager_.showToolbars(); 371 this.toolbarManager_.showToolbars();
378 this.toolbar_.selectPageNumber(); 372 this.toolbar_.selectPageNumber();
379 } 373 }
380 return; 374 return;
381 case 219: // Left bracket key. 375 case 219: // Left bracket key.
382 if (e.ctrlKey) 376 if (e.ctrlKey)
383 this.rotateCounterClockwise_(); 377 this.rotateCounterClockwise_();
384 return; 378 return;
385 case 220: // Backslash key. 379 case 220: // Backslash key.
386 if (e.ctrlKey) 380 if (e.ctrlKey)
387 this.zoomToolbar_.fitToggleFromHotKey(); 381 this.zoomToolbar_.fitToggleFromHotKey();
388 return; 382 return;
389 case 221: // Right bracket key. 383 case 221: // Right bracket key.
390 if (e.ctrlKey) 384 if (e.ctrlKey)
391 this.rotateClockwise_(); 385 this.rotateClockwise_();
392 return; 386 return;
393 } 387 }
394 388
395 // Give print preview a chance to handle the key event. 389 // Give print preview a chance to handle the key event.
396 if (!fromScriptingAPI && this.isPrintPreview_) { 390 if (!fromScriptingAPI && this.isPrintPreview_) {
397 this.sendScriptingMessage_({ 391 this.sendScriptingMessage_(
398 type: 'sendKeyEvent', 392 {type: 'sendKeyEvent', keyEvent: SerializeKeyEvent(e)});
399 keyEvent: SerializeKeyEvent(e)
400 });
401 } else { 393 } else {
402 // Show toolbars as a fallback. 394 // Show toolbars as a fallback.
403 if (!(e.shiftKey || e.ctrlKey || e.altKey)) 395 if (!(e.shiftKey || e.ctrlKey || e.altKey))
404 this.toolbarManager_.showToolbars(); 396 this.toolbarManager_.showToolbars();
405 } 397 }
406 }, 398 },
407 399
408 handleMouseEvent_: function(e) { 400 handleMouseEvent_: function(e) {
409 if (e.type == 'mousemove') 401 if (e.type == 'mousemove')
410 this.toolbarManager_.handleMouseMove(e); 402 this.toolbarManager_.handleMouseMove(e);
(...skipping 10 matching lines...) Expand all
421 !this.gestureDetector_.wasTwoFingerTouch()) { 413 !this.gestureDetector_.wasTwoFingerTouch()) {
422 e.preventDefault(); 414 e.preventDefault();
423 } 415 }
424 }, 416 },
425 417
426 /** 418 /**
427 * @private 419 * @private
428 * Rotate the plugin clockwise. 420 * Rotate the plugin clockwise.
429 */ 421 */
430 rotateClockwise_: function() { 422 rotateClockwise_: function() {
431 this.plugin_.postMessage({ 423 this.plugin_.postMessage({type: 'rotateClockwise'});
432 type: 'rotateClockwise'
433 });
434 }, 424 },
435 425
436 /** 426 /**
437 * @private 427 * @private
438 * Rotate the plugin counter-clockwise. 428 * Rotate the plugin counter-clockwise.
439 */ 429 */
440 rotateCounterClockwise_: function() { 430 rotateCounterClockwise_: function() {
441 this.plugin_.postMessage({ 431 this.plugin_.postMessage({type: 'rotateCounterclockwise'});
442 type: 'rotateCounterclockwise'
443 });
444 }, 432 },
445 433
446 /** 434 /**
447 * @private 435 * @private
448 * Set zoom to "fit to page". 436 * Set zoom to "fit to page".
449 */ 437 */
450 fitToPage_: function() { 438 fitToPage_: function() {
451 this.viewport_.fitToPage(); 439 this.viewport_.fitToPage();
452 this.toolbarManager_.forceHideTopToolbar(); 440 this.toolbarManager_.forceHideTopToolbar();
453 }, 441 },
454 442
455 /** 443 /**
456 * @private 444 * @private
457 * Notify the plugin to print. 445 * Notify the plugin to print.
458 */ 446 */
459 print_: function() { 447 print_: function() {
460 this.plugin_.postMessage({ 448 this.plugin_.postMessage({type: 'print'});
461 type: 'print'
462 });
463 }, 449 },
464 450
465 /** 451 /**
466 * @private 452 * @private
467 * Notify the plugin to save. 453 * Notify the plugin to save.
468 */ 454 */
469 save_: function() { 455 save_: function() {
470 this.plugin_.postMessage({ 456 this.plugin_.postMessage({type: 'save'});
471 type: 'save'
472 });
473 }, 457 },
474 458
475 /** 459 /**
476 * Fetches the page number corresponding to the given named destination from 460 * Fetches the page number corresponding to the given named destination from
477 * the plugin. 461 * the plugin.
478 * @param {string} name The namedDestination to fetch page number from plugin. 462 * @param {string} name The namedDestination to fetch page number from plugin.
479 */ 463 */
480 getNamedDestination_: function(name) { 464 getNamedDestination_: function(name) {
481 this.plugin_.postMessage({ 465 this.plugin_.postMessage(
482 type: 'getNamedDestination', 466 {type: 'getNamedDestination', namedDestination: name});
483 namedDestination: name
484 });
485 }, 467 },
486 468
487 /** 469 /**
488 * @private 470 * @private
489 * Sends a 'documentLoaded' message to the PDFScriptingAPI if the document has 471 * Sends a 'documentLoaded' message to the PDFScriptingAPI if the document has
490 * finished loading. 472 * finished loading.
491 */ 473 */
492 sendDocumentLoadedMessage_: function() { 474 sendDocumentLoadedMessage_: function() {
493 if (this.loadState_ == LoadState.LOADING) 475 if (this.loadState_ == LoadState.LOADING)
494 return; 476 return;
495 this.sendScriptingMessage_({ 477 this.sendScriptingMessage_(
496 type: 'documentLoaded', 478 {type: 'documentLoaded', load_state: this.loadState_});
497 load_state: this.loadState_
498 });
499 }, 479 },
500 480
501 /** 481 /**
502 * @private 482 * @private
503 * Handle open pdf parameters. This function updates the viewport as per 483 * Handle open pdf parameters. This function updates the viewport as per
504 * the parameters mentioned in the url while opening pdf. The order is 484 * the parameters mentioned in the url while opening pdf. The order is
505 * important as later actions can override the effects of previous actions. 485 * important as later actions can override the effects of previous actions.
506 * @param {Object} viewportPosition The initial position of the viewport to be 486 * @param {Object} viewportPosition The initial position of the viewport to be
507 * displayed. 487 * displayed.
508 */ 488 */
(...skipping 29 matching lines...) Expand all
538 this.passwordScreen_.deny(); 518 this.passwordScreen_.deny();
539 this.passwordScreen_.close(); 519 this.passwordScreen_.close();
540 } 520 }
541 this.loadState_ = LoadState.FAILED; 521 this.loadState_ = LoadState.FAILED;
542 this.sendDocumentLoadedMessage_(); 522 this.sendDocumentLoadedMessage_();
543 } else if (progress == 100) { 523 } else if (progress == 100) {
544 // Document load complete. 524 // Document load complete.
545 if (this.lastViewportPosition_) 525 if (this.lastViewportPosition_)
546 this.viewport_.position = this.lastViewportPosition_; 526 this.viewport_.position = this.lastViewportPosition_;
547 this.paramsParser_.getViewportFromUrlParams( 527 this.paramsParser_.getViewportFromUrlParams(
548 this.originalUrl_, 528 this.originalUrl_, this.handleURLParams_.bind(this));
549 this.handleURLParams_.bind(this));
550 this.loadState_ = LoadState.SUCCESS; 529 this.loadState_ = LoadState.SUCCESS;
551 this.sendDocumentLoadedMessage_(); 530 this.sendDocumentLoadedMessage_();
552 while (this.delayedScriptingMessages_.length > 0) 531 while (this.delayedScriptingMessages_.length > 0)
553 this.handleScriptingMessage(this.delayedScriptingMessages_.shift()); 532 this.handleScriptingMessage(this.delayedScriptingMessages_.shift());
554 533
555 this.toolbarManager_.hideToolbarsAfterTimeout(); 534 this.toolbarManager_.hideToolbarsAfterTimeout();
556 } 535 }
557 }, 536 },
558 537
559 /** 538 /**
(...skipping 12 matching lines...) Expand all
572 $('error-screen').strings = strings; 551 $('error-screen').strings = strings;
573 }, 552 },
574 553
575 /** 554 /**
576 * @private 555 * @private
577 * An event handler for handling password-submitted events. These are fired 556 * An event handler for handling password-submitted events. These are fired
578 * when an event is entered into the password screen. 557 * when an event is entered into the password screen.
579 * @param {Object} event a password-submitted event. 558 * @param {Object} event a password-submitted event.
580 */ 559 */
581 onPasswordSubmitted_: function(event) { 560 onPasswordSubmitted_: function(event) {
582 this.plugin_.postMessage({ 561 this.plugin_.postMessage(
583 type: 'getPasswordComplete', 562 {type: 'getPasswordComplete', password: event.detail.password});
584 password: event.detail.password
585 });
586 }, 563 },
587 564
588 /** 565 /**
589 * @private 566 * @private
590 * An event handler for handling message events received from the plugin. 567 * An event handler for handling message events received from the plugin.
591 * @param {MessageObject} message a message event. 568 * @param {MessageObject} message a message event.
592 */ 569 */
593 handlePluginMessage_: function(message) { 570 handlePluginMessage_: function(message) {
594 switch (message.data.type.toString()) { 571 switch (message.data.type.toString()) {
595 case 'documentDimensions': 572 case 'documentDimensions':
(...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after
675 break; 652 break;
676 } 653 }
677 }, 654 },
678 655
679 /** 656 /**
680 * @private 657 * @private
681 * A callback that's called before the zoom changes. Notify the plugin to stop 658 * A callback that's called before the zoom changes. Notify the plugin to stop
682 * reacting to scroll events while zoom is taking place to avoid flickering. 659 * reacting to scroll events while zoom is taking place to avoid flickering.
683 */ 660 */
684 beforeZoom_: function() { 661 beforeZoom_: function() {
685 this.plugin_.postMessage({ 662 this.plugin_.postMessage({type: 'stopScrolling'});
686 type: 'stopScrolling'
687 });
688 663
689 if (this.viewport_.pinchPhase == Viewport.PinchPhase.PINCH_START) { 664 if (this.viewport_.pinchPhase == Viewport.PinchPhase.PINCH_START) {
690 var position = this.viewport_.position; 665 var position = this.viewport_.position;
691 var zoom = this.viewport_.zoom; 666 var zoom = this.viewport_.zoom;
692 var pinchPhase = this.viewport_.pinchPhase; 667 var pinchPhase = this.viewport_.pinchPhase;
693 this.plugin_.postMessage({ 668 this.plugin_.postMessage({
694 type: 'viewport', 669 type: 'viewport',
695 zoom: zoom, 670 zoom: zoom,
696 xOffset: position.x, 671 xOffset: position.x,
697 yOffset: position.y, 672 yOffset: position.y,
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after
770 var horizontalScrollbarWidth = 745 var horizontalScrollbarWidth =
771 hasScrollbars.horizontal ? scrollbarWidth : 0; 746 hasScrollbars.horizontal ? scrollbarWidth : 0;
772 747
773 // Shift the zoom toolbar to the left by half a scrollbar width. This 748 // Shift the zoom toolbar to the left by half a scrollbar width. This
774 // gives a compromise: if there is no scrollbar visible then the toolbar 749 // gives a compromise: if there is no scrollbar visible then the toolbar
775 // will be half a scrollbar width further left than the spec but if there 750 // will be half a scrollbar width further left than the spec but if there
776 // is a scrollbar visible it will be half a scrollbar width further right 751 // is a scrollbar visible it will be half a scrollbar width further right
777 // than the spec. In RTL layout, the zoom toolbar is on the left side, but 752 // than the spec. In RTL layout, the zoom toolbar is on the left side, but
778 // the scrollbar is still on the right, so this is not necessary. 753 // the scrollbar is still on the right, so this is not necessary.
779 if (!isRTL()) { 754 if (!isRTL()) {
780 this.zoomToolbar_.style.right = -verticalScrollbarWidth + 755 this.zoomToolbar_.style.right =
781 (scrollbarWidth / 2) + 'px'; 756 -verticalScrollbarWidth + (scrollbarWidth / 2) + 'px';
782 } 757 }
783 // Having a horizontal scrollbar is much rarer so we don't offset the 758 // Having a horizontal scrollbar is much rarer so we don't offset the
784 // toolbar from the bottom any more than what the spec says. This means 759 // toolbar from the bottom any more than what the spec says. This means
785 // that when there is a scrollbar visible, it will be a full scrollbar 760 // that when there is a scrollbar visible, it will be a full scrollbar
786 // width closer to the bottom of the screen than usual, but this is ok. 761 // width closer to the bottom of the screen than usual, but this is ok.
787 this.zoomToolbar_.style.bottom = -horizontalScrollbarWidth + 'px'; 762 this.zoomToolbar_.style.bottom = -horizontalScrollbarWidth + 'px';
788 763
789 // Update the page indicator. 764 // Update the page indicator.
790 var visiblePage = this.viewport_.getMostVisiblePage(); 765 var visiblePage = this.viewport_.getMostVisiblePage();
791 766
(...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after
883 saveButton.parentNode.removeChild(saveButton); 858 saveButton.parentNode.removeChild(saveButton);
884 859
885 this.pageIndicator_.pageLabels = message.data.pageNumbers; 860 this.pageIndicator_.pageLabels = message.data.pageNumbers;
886 861
887 this.plugin_.postMessage({ 862 this.plugin_.postMessage({
888 type: 'resetPrintPreviewMode', 863 type: 'resetPrintPreviewMode',
889 url: message.data.url, 864 url: message.data.url,
890 grayscale: message.data.grayscale, 865 grayscale: message.data.grayscale,
891 // If the PDF isn't modifiable we send 0 as the page count so that no 866 // If the PDF isn't modifiable we send 0 as the page count so that no
892 // blank placeholder pages get appended to the PDF. 867 // blank placeholder pages get appended to the PDF.
893 pageCount: (message.data.modifiable ? 868 pageCount:
894 message.data.pageNumbers.length : 0) 869 (message.data.modifiable ? message.data.pageNumbers.length : 0)
895 }); 870 });
896 return true; 871 return true;
897 case 'sendKeyEvent': 872 case 'sendKeyEvent':
898 this.handleKeyEvent_(DeserializeKeyEvent(message.data.keyEvent)); 873 this.handleKeyEvent_(DeserializeKeyEvent(message.data.keyEvent));
899 return true; 874 return true;
900 } 875 }
901 876
902 return false; 877 return false;
903 }, 878 },
904 879
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
936 * Each bookmark is an Object containing a: 911 * Each bookmark is an Object containing a:
937 * - title 912 * - title
938 * - page (optional) 913 * - page (optional)
939 * - array of children (themselves bookmarks) 914 * - array of children (themselves bookmarks)
940 * @type {Array} the top-level bookmarks of the PDF. 915 * @type {Array} the top-level bookmarks of the PDF.
941 */ 916 */
942 get bookmarks() { 917 get bookmarks() {
943 return this.bookmarks_; 918 return this.bookmarks_;
944 } 919 }
945 }; 920 };
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698