Index: chrome/browser/resources/pdf/pdf.js |
diff --git a/chrome/browser/resources/pdf/pdf.js b/chrome/browser/resources/pdf/pdf.js |
index 309886fde637a343d583d44f3d367064a374c317..5e60f2329f280b51c23c3850e077c9ec86cf5cb5 100644 |
--- a/chrome/browser/resources/pdf/pdf.js |
+++ b/chrome/browser/resources/pdf/pdf.js |
@@ -190,10 +190,11 @@ function PDFViewer(streamDetails) { |
} |
// Parse open pdf parameters. |
- this.paramsParser_ = new OpenPDFParamsParser(); |
+ this.paramsParser_ = |
+ new OpenPDFParamsParser(this.getNamedDestination_.bind(this)); |
this.navigator_ = new Navigator(this.streamDetails_.originalUrl, |
- this.viewport_, this.paramsParser_, onNavigateInCurrentTab, |
- onNavigateInNewTab); |
+ this.viewport_, this.paramsParser_, |
+ onNavigateInCurrentTab, onNavigateInNewTab); |
this.viewportScroller_ = |
new ViewportScroller(this.viewport_, this.plugin_, window); |
} |
@@ -350,35 +351,54 @@ PDFViewer.prototype = { |
* @private |
* Notify the plugin to print. |
*/ |
- print_: function() { this.plugin_.postMessage({type: 'print'}); }, |
+ print_: function() { |
+ this.plugin_.postMessage({ |
+ type: 'print' |
+ }); |
+ }, |
/** |
* @private |
* Notify the plugin to save. |
*/ |
- save_: function() { this.plugin_.postMessage({type: 'save'}); }, |
+ save_: function() { |
+ this.plugin_.postMessage({ |
+ type: 'save' |
+ }); |
+ }, |
+ |
+ /** |
+ * Fetches the page number corresponding to the given named destination from |
+ * the plugin. |
+ * @param {string} name The namedDestination to fetch page number from plugin. |
+ */ |
+ getNamedDestination_: function(name) { |
+ this.plugin_.postMessage({ |
+ type: 'getNamedDestination', |
+ namedDestination: name |
+ }); |
+ }, |
/** |
* @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. |
+ * @param {Object} viewportPosition The initial position of the viewport to be |
+ * displayed. |
*/ |
- handleURLParams_: function() { |
- var urlParams = |
- this.paramsParser_.getViewportFromUrlParams( |
- this.streamDetails_.originalUrl); |
- if (urlParams.page) |
- this.viewport_.goToPage(urlParams.page); |
- if (urlParams.position) { |
+ handleURLParams_: function(viewportPosition) { |
+ if (viewportPosition.page != undefined) |
+ this.viewport_.goToPage(viewportPosition.page); |
+ if (viewportPosition.position) { |
// Make sure we don't cancel effect of page parameter. |
this.viewport_.position = { |
- x: this.viewport_.position.x + urlParams.position.x, |
- y: this.viewport_.position.y + urlParams.position.y |
+ x: this.viewport_.position.x + viewportPosition.position.x, |
+ y: this.viewport_.position.y + viewportPosition.position.y |
}; |
} |
- if (urlParams.zoom) |
- this.viewport_.setZoom(urlParams.zoom); |
+ if (viewportPosition.zoom) |
+ this.viewport_.setZoom(viewportPosition.zoom); |
}, |
/** |
@@ -406,7 +426,8 @@ PDFViewer.prototype = { |
// Document load complete. |
if (this.lastViewportPosition_) |
this.viewport_.position = this.lastViewportPosition_; |
- this.handleURLParams_(); |
+ this.paramsParser_.getViewportFromUrlParams( |
+ this.streamDetails_.originalUrl, this.handleURLParams_.bind(this)); |
this.loaded_ = true; |
this.sendScriptingMessage_({ |
type: 'documentLoaded' |
@@ -486,9 +507,6 @@ PDFViewer.prototype = { |
else |
this.navigator_.navigate(message.data.url, message.data.newTab); |
break; |
- case 'setNamedDestinations': |
- this.paramsParser_.namedDestinations = message.data.namedDestinations; |
- break; |
case 'setScrollPosition': |
var position = this.viewport_.position; |
if (message.data.x !== undefined) |
@@ -519,6 +537,10 @@ PDFViewer.prototype = { |
case 'setIsSelecting': |
this.viewportScroller_.setEnableScrolling(message.data.isSelecting); |
break; |
+ case 'getNamedDestinationReply': |
+ this.paramsParser_.onNamedDestinationReceived( |
+ message.data.pageNumber); |
+ break; |
} |
}, |