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

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

Issue 918953002: Fix for PDFs with lots of named destinations take a long time to load. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 10 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 eaf96ac6559e17fa4f494b4e89bda07c2d7ff9cf..028eabf44825ece705de52b11781e565b3685643 100644
--- a/chrome/browser/resources/pdf/pdf.js
+++ b/chrome/browser/resources/pdf/pdf.js
@@ -31,14 +31,6 @@ function getFilenameFromURL(url) {
}
/**
- * Called when navigation happens in the current tab.
- * @param {string} url The url to be opened in the current tab.
- */
-function onNavigateInCurrentTab(url) {
- window.location.href = url;
-}
-
-/**
* Called when navigation happens in the new tab.
* @param {string} url The url to be opened in the new tab.
*/
@@ -187,9 +179,9 @@ function PDFViewer(streamDetails) {
// Parse open pdf parameters.
this.paramsParser_ = new OpenPDFParamsParser();
- this.navigator_ = new Navigator(this.streamDetails_.originalUrl,
- this.viewport_, this.paramsParser_, onNavigateInCurrentTab,
- onNavigateInNewTab);
+ this.navigator_ = new Navigator(
+ this.streamDetails_.originalUrl, this.viewport_, this.paramsParser_,
+ this.onNavigateInCurrentTab_.bind(this), onNavigateInNewTab);
raymes 2015/02/12 22:19:05 This shouldn't change
}
PDFViewer.prototype = {
@@ -344,33 +336,53 @@ 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() {
+ save_: function() { this.plugin_.postMessage({type: 'save'}); },
raymes 2015/02/12 22:19:05 nit: don't change these
+
+ /**
+ * @private
+ * Callback to fetch namedDestination from plugin.
+ */
+ namedDestCallback_: function(namedDestination, url) {
raymes 2015/02/12 22:19:05 This should be called getNamedDestination(name)
this.plugin_.postMessage({
- type: 'save'
+ type: 'getNamedDestination',
+ namedDestination: namedDestination,
+ navigationUrl: url
});
},
/**
+ * Called when navigation happens in the current tab.
+ * @param {string} url The url to be opened in the current tab.
+ */
+ onNavigateInCurrentTab_: function(url) {
+ var pageNumber =
+ this.paramsParser_.getViewportFromUrlParams(
+ url, this.namedDestCallback_.bind(this), true)
+ .page;
+ if (pageNumber != undefined && pageNumber != -1)
+ this.viewport_.goToPage(pageNumber);
+ else
+ window.location.href = url;
+ },
raymes 2015/02/12 22:19:05 This shouldn't be here
+
+
+ /**
* @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.
*/
handleURLParams_: function() {
- var urlParams =
- this.paramsParser_.getViewportFromUrlParams(
- this.streamDetails_.originalUrl);
- if (urlParams.page)
+ var urlParams = this.paramsParser_.getViewportFromUrlParams(
+ this.streamDetails_.originalUrl, this.namedDestCallback_.bind(this),
+ false);
raymes 2015/02/12 22:19:05 This should look like this.parmsParser_.getViewpo
+ if (urlParams.page && urlParams.page != -1)
this.viewport_.goToPage(urlParams.page);
if (urlParams.position) {
// Make sure we don't cancel effect of page parameter.
@@ -454,7 +466,6 @@ PDFViewer.prototype = {
} else {
this.pageIndicator_.initialFadeIn();
}
-
this.toolbar_.initialFadeIn();
break;
case 'email':
@@ -490,9 +501,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)
@@ -518,6 +526,12 @@ PDFViewer.prototype = {
if (this.isMaterial_)
this.bookmarksPane_.bookmarks = message.data.bookmarks;
break;
+ case 'getNamedDestinationReply':
raymes 2015/02/12 22:19:05 this should just call: this.paramsParser_.onNamedD
+ if (message.data.namedDestinationPageNumber != undefined)
+ this.viewport_.goToPage(message.data.namedDestinationPageNumber);
+ else if (message.data.navigationUrl)
+ window.location.href = message.data.navigationUrl;
+ break;
}
},

Powered by Google App Engine
This is Rietveld 408576698