Add ENABLE_MEDIA_ROUTER define to builds other than Android and iOS.
[chromium-blink-merge.git] / chrome / browser / resources / pdf / open_pdf_params_parser.js
blobddd18be4164d846383de82610efae8653dc1155e
1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 'use strict';
7 /**
8 * Creates a new OpenPDFParamsParser. This parses the open pdf parameters
9 * passed in the url to set initial viewport settings for opening the pdf.
10 * @param {Object} getNamedDestinationsFunction The function called to fetch
11 * the page number for a named destination.
13 function OpenPDFParamsParser(getNamedDestinationsFunction) {
14 this.outstandingRequests_ = [];
15 this.getNamedDestinationsFunction_ = getNamedDestinationsFunction;
18 OpenPDFParamsParser.prototype = {
19 /**
20 * @private
21 * Parse zoom parameter of open PDF parameters. If this
22 * parameter is passed while opening PDF then PDF should be opened
23 * at the specified zoom level.
24 * @param {number} zoom value.
25 * @param {Object} viewportPosition to store zoom and position value.
27 parseZoomParam_: function(paramValue, viewportPosition) {
28 var paramValueSplit = paramValue.split(',');
29 if ((paramValueSplit.length != 1) && (paramValueSplit.length != 3))
30 return;
32 // User scale of 100 means zoom value of 100% i.e. zoom factor of 1.0.
33 var zoomFactor = parseFloat(paramValueSplit[0]) / 100;
34 if (isNaN(zoomFactor))
35 return;
37 // Handle #zoom=scale.
38 if (paramValueSplit.length == 1) {
39 viewportPosition['zoom'] = zoomFactor;
40 return;
43 // Handle #zoom=scale,left,top.
44 var position = {x: parseFloat(paramValueSplit[1]),
45 y: parseFloat(paramValueSplit[2])};
46 viewportPosition['position'] = position;
47 viewportPosition['zoom'] = zoomFactor;
50 /**
51 * @private
52 * Parse PDF url parameters. These parameters are mentioned in the url
53 * and specify actions to be performed when opening pdf files.
54 * See http://www.adobe.com/content/dam/Adobe/en/devnet/acrobat/
55 * pdfs/pdf_open_parameters.pdf for details.
56 * @param {string} url that needs to be parsed.
57 * @param {Function} callback function to be called with viewport info.
59 getViewportFromUrlParams: function(url, callback) {
60 var viewportPosition = {};
61 viewportPosition['url'] = url;
62 var paramIndex = url.search('#');
63 if (paramIndex == -1) {
64 callback(viewportPosition);
65 return;
68 var paramTokens = url.substring(paramIndex + 1).split('&');
69 if ((paramTokens.length == 1) && (paramTokens[0].search('=') == -1)) {
70 // Handle the case of http://foo.com/bar#NAMEDDEST. This is not
71 // explicitly mentioned except by example in the Adobe
72 // "PDF Open Parameters" document.
73 this.outstandingRequests_.push({
74 callback: callback,
75 viewportPosition: viewportPosition
76 });
77 this.getNamedDestinationsFunction_(paramTokens[0]);
78 return;
81 var paramsDictionary = {};
82 for (var i = 0; i < paramTokens.length; ++i) {
83 var keyValueSplit = paramTokens[i].split('=');
84 if (keyValueSplit.length != 2)
85 continue;
86 paramsDictionary[keyValueSplit[0]] = keyValueSplit[1];
89 if ('page' in paramsDictionary) {
90 // |pageNumber| is 1-based, but goToPage() take a zero-based page number.
91 var pageNumber = parseInt(paramsDictionary['page']);
92 if (!isNaN(pageNumber) && pageNumber > 0)
93 viewportPosition['page'] = pageNumber - 1;
96 if ('zoom' in paramsDictionary)
97 this.parseZoomParam_(paramsDictionary['zoom'], viewportPosition);
99 if (viewportPosition.page === undefined &&
100 'nameddest' in paramsDictionary) {
101 this.outstandingRequests_.push({
102 callback: callback,
103 viewportPosition: viewportPosition
105 this.getNamedDestinationsFunction_(paramsDictionary['nameddest']);
106 } else {
107 callback(viewportPosition);
112 * This is called when a named destination is received and the page number
113 * corresponding to the request for which a named destination is passed.
114 * @param {number} pageNumber The page corresponding to the named destination
115 * requested.
117 onNamedDestinationReceived: function(pageNumber) {
118 var outstandingRequest = this.outstandingRequests_.shift();
119 if (pageNumber != -1)
120 outstandingRequest.viewportPosition.page = pageNumber;
121 outstandingRequest.callback(outstandingRequest.viewportPosition);