Commit aa70882f authored by K Moon's avatar K Moon Committed by Commit Bot

Pass PDF layout options through JavaScript

Adds a "LayoutOptions" object that is passed from the PDF plugin (via
the "documentDimensions" message), through the extension, and back to
the plugin (via the "viewport" message).

We plan to make layout asynchronous for crbug.com/885110. To accomplish
this, we need to carry certain layout state through the JavaScript
layer, until the layout change finally is applied.

In the future, we may want to modify the layout options in JavaScript
(such as for 2-up view), but for now, we just need to pass the exact
same object back and forth.

Bug: 885110
Change-Id: Iaac57422dbba185399358ceffdbde4e6ad2c7899
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1815769
Commit-Queue: K Moon <kmoon@chromium.org>
Reviewed-by: default avatarRebekah Potter <rbpotter@chromium.org>
Cr-Commit-Position: refs/heads/master@{#700417}
parent d3e37e4a
......@@ -266,10 +266,12 @@ class PluginController extends ContentController {
const position = this.viewport_.position;
const zoom = this.viewport_.getZoom();
const pinchPhase = this.viewport_.pinchPhase;
const layoutOptions = this.viewport_.getLayoutOptions();
this.postMessage_({
type: 'viewport',
userInitiated: true,
zoom: zoom,
layoutOptions: layoutOptions,
xOffset: position.x,
yOffset: position.y,
pinchPhase: pinchPhase
......@@ -285,6 +287,7 @@ class PluginController extends ContentController {
afterZoom() {
const position = this.viewport_.position;
const zoom = this.viewport_.getZoom();
const layoutOptions = this.viewport_.getLayoutOptions();
const pinchVector = this.viewport_.pinchPanVector || {x: 0, y: 0};
const pinchCenter = this.viewport_.pinchCenter || {x: 0, y: 0};
const pinchPhase = this.viewport_.pinchPhase;
......@@ -293,6 +296,7 @@ class PluginController extends ContentController {
type: 'viewport',
userInitiated: this.getIsUserInitiatedCallback_(),
zoom: zoom,
layoutOptions: layoutOptions,
xOffset: position.x,
yOffset: position.y,
pinchPhase: pinchPhase,
......
......@@ -18,6 +18,7 @@ let MessageObject;
* type: string,
* height: number,
* width: number,
* layoutOptions: (!LayoutOptions|undefined),
* pageDimensions: Array
* }}
*/
......
......@@ -6,11 +6,15 @@
* @typedef {{
* width: number,
* height: number,
* layoutOptions: (!LayoutOptions|undefined),
* pageDimensions: Array<ViewportRect>,
* }}
*/
let DocumentDimensions;
/** @typedef {{defaultPageOrientation: number}} */
let LayoutOptions;
/** @typedef {{x: number, y: number}} */
let Point;
......@@ -281,6 +285,15 @@ class Viewport {
};
}
/**
* @return {!LayoutOptions|undefined} A dictionary carrying layout options
* from the plugin.
*/
getLayoutOptions() {
return this.documentDimensions_ ? this.documentDimensions_.layoutOptions :
undefined;
}
/**
* @return {!ViewportRect} ViewportRect for the viewport given current zoom.
* @private
......
......@@ -80,9 +80,10 @@ function MockViewportChangedCallback() {
};
}
function MockDocumentDimensions(width, height) {
function MockDocumentDimensions(width, height, layoutOptions) {
this.width = width || 0;
this.height = height ? height : 0;
this.layoutOptions = layoutOptions;
this.pageDimensions = [];
this.addPage = function(w, h) {
var y = 0;
......
......@@ -1033,6 +1033,23 @@ var tests = [
chrome.test.succeed();
},
function testLayoutOptions() {
var viewport =
new Viewport(new MockWindow(100, 100), new MockSizer(), 0, 1, 0);
chrome.test.assertEq(undefined, viewport.getLayoutOptions());
viewport.setDocumentDimensions(
new MockDocumentDimensions(50, 50, {defaultPageOrientation: 1}));
chrome.test.assertEq(
{defaultPageOrientation: 1}, viewport.getLayoutOptions());
viewport.setDocumentDimensions(new MockDocumentDimensions(50, 50));
chrome.test.assertEq(undefined, viewport.getLayoutOptions());
chrome.test.succeed();
},
function testToolbarHeightOffset() {
var mockSizer = new MockSizer();
var mockWindow = new MockWindow(100, 100);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment