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

Unified Diff: chrome/browser/resources/pdf/pdf.js

Issue 554893002: [WORK_IN_PROGRESS] PDF::Save() fix for out-of-process-pdf. Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: better fix for constrained windows Created 6 years, 3 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 side-by-side diff with in-line comments
Download patch
Index: chrome/browser/resources/pdf/pdf.js
diff --git a/chrome/browser/resources/pdf/pdf.js b/chrome/browser/resources/pdf/pdf.js
index 0aa437aef03c7e1747929fe50925367d29164878..a96ab101dfbb219797feba193391b61ce369b1d7 100644
--- a/chrome/browser/resources/pdf/pdf.js
+++ b/chrome/browser/resources/pdf/pdf.js
@@ -35,7 +35,8 @@ PDFViewer.MIN_TOOLBAR_OFFSET = 15;
* Creates a new PDFViewer. There should only be one of these objects per
* document.
*/
-function PDFViewer() {
+function PDFViewer(streamDetails) {
+ this.streamDetails = streamDetails;
this.loaded = false;
// The sizer element is placed behind the plugin element to cause scrollbars
@@ -77,28 +78,6 @@ function PDFViewer() {
false);
this.sendScriptingMessage_({type: 'readyToReceive'});
- // If the viewer is started from a MIME type request, there will be a
- // background page and stream details object with the details of the request.
- // Otherwise, we take the query string of the URL to indicate the URL of the
- // PDF to load. This is used for print preview in particular.
- if (chrome.extension.getBackgroundPage &&
- chrome.extension.getBackgroundPage()) {
- this.streamDetails =
- chrome.extension.getBackgroundPage().popStreamDetails();
- }
-
- if (!this.streamDetails) {
- // The URL of this page will be of the form
- // "chrome-extension://<extension id>?<pdf url>". We pull out the <pdf url>
- // part here.
- var url = window.location.search.substring(1);
- this.streamDetails = {
- streamUrl: url,
- originalUrl: url,
- responseHeaders: ''
- };
- }
-
this.plugin_.setAttribute('src', this.streamDetails.originalUrl);
this.plugin_.setAttribute('stream-url', this.streamDetails.streamUrl);
var headers = '';
@@ -130,7 +109,7 @@ function PDFViewer() {
this.viewport_.zoomIn.bind(this.viewport_));
$('zoom-out-button').addEventListener('click',
this.viewport_.zoomOut.bind(this.viewport_));
- $('save-button-link').href = this.streamDetails.originalUrl;
+ $('save-button-link').addEventListener('click', this.save_.bind(this));
$('print-button').addEventListener('click', this.print_.bind(this));
// Setup the keyboard event listener.
@@ -180,9 +159,9 @@ PDFViewer.prototype = {
e.preventDefault();
} else if (fromScriptingAPI) {
position.y -= this.viewport.size.height;
- this.viewport.position = position;
+ this.viewport_.position = position;
}
- };
+ }.bind(this);
var pageDownHandler = function() {
// Go to the next page if we are fit-to-page.
if (this.viewport_.fittingType == Viewport.FittingType.FIT_TO_PAGE) {
@@ -191,9 +170,9 @@ PDFViewer.prototype = {
e.preventDefault();
} else if (fromScriptingAPI) {
position.y += this.viewport.size.height;
- this.viewport.position = position;
+ this.viewport_.position = position;
}
- };
+ }.bind(this);
switch (e.keyCode) {
case 32: // Space key.
@@ -242,15 +221,6 @@ PDFViewer.prototype = {
this.viewport.position = position;
}
return;
- case 83: // s key.
- if (e.ctrlKey || e.metaKey) {
- // Simulate a click on the button so that the <a download ...>
- // attribute is used.
- $('save-button-link').click();
- // Since we do the saving of the page.
- e.preventDefault();
- }
- return;
case 80: // p key.
if (e.ctrlKey || e.metaKey) {
this.print_();
@@ -273,6 +243,17 @@ PDFViewer.prototype = {
/**
* @private
+ * Notify the plugin to save.
+ */
+ save_: function() {
+ this.plugin_.postMessage({
+ type: 'save'
+ });
+ },
+
+
+ /**
+ * @private
* Handle open pdf parameters. This function updates the viewport as per
* the parameters mentioned in the url while opening pdf. The order is
* important as later actions can override the effects of previous actions.
@@ -574,4 +555,51 @@ PDFViewer.prototype = {
}
};
-var viewer = new PDFViewer();
+var viewer;
+function initPlugin(streamDetails) {
+ viewer = new PDFViewer(streamDetails);
+}
+
+function initUrl() {
+ // If the viewer is started from the browser plugin, the plugin ID will be
+ // passed in.
+ var params = window.location.search.substring(1).split('=');
+ var viewId = '';
+ if (params.length == 2 && params[0] == 'id')
+ viewId = params[1];
+
+ if (viewId) {
+ chrome.runtime.sendMessage('mhjfbmdgcfjbbpaeojofohoefgiehjai',
+ {viewId: viewId},
+ initPlugin);
+ return;
+ }
+
+ // The viewer may be started via a background page from the extension.
+ var streamDetails;
+ if (chrome.extension &&
+ chrome.extension.getBackgroundPage &&
+ chrome.extension.getBackgroundPage()) {
+ streamDetails =
+ chrome.extension.getBackgroundPage().popStreamDetails();
+ if (streamDetails) {
+ initPlugin(streamDetails);
+ return;
+ }
+ }
+
+ // The viewer may be started directly by passing in the URL of the PDF to load
+ // as the query string. This is used for print preview in particular. The URL
+ // of this page will be of the form
+ // "chrome-extension://<extension id>?<pdf url>". We pull out the <pdf url>
+ // part here.
+ var url = window.location.search.substring(1);
+ streamDetails = {
+ streamUrl: url,
+ originalUrl: url,
+ responseHeaders: ''
+ };
+ initPlugin(streamDetails);
+}
+
+initUrl();
« no previous file with comments | « chrome/browser/resources/pdf/manifest.json ('k') | chrome/browser/ui/cocoa/constrained_window/constrained_window_mac.mm » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698