Commit 0f8a4ac4 authored by Daniel Hosseinian's avatar Daniel Hosseinian Committed by Commit Bot

Add getEventTarget() to PDF Viewer Controller interface

Simultaneously, put existing event types in enums.

Bug: 1134208
Change-Id: Ia4a3d7f6d03c0969b1f18961db0899a8a7f51b9e
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2512368
Commit-Queue: Daniel Hosseinian <dhoss@chromium.org>
Reviewed-by: default avatarRebekah Potter <rbpotter@chromium.org>
Cr-Commit-Position: refs/heads/master@{#824589}
parent 6e86d31b
......@@ -67,6 +67,9 @@ function createToken() {
export class ContentController {
constructor() {}
/** @return {!EventTarget} */
getEventTarget() {}
/** @return {boolean} */
get isActive() {}
......@@ -127,11 +130,19 @@ export class ContentController {
unload() {}
}
/**
* Event types dispatched by the plugin controller.
* @enum {string}
*/
export const PluginControllerEventType = {
PLUGIN_MESSAGE: 'PluginControllerEventType.PLUGIN_MESSAGE',
};
/**
* PDF plugin controller singleton, responsible for communicating with the
* embedded plugin element. Dispatches a 'plugin-message' event containing the
* message from the plugin, if a message type not handled by this controller is
* received.
* embedded plugin element. Dispatches a
* `PluginControllerEventType.PLUGIN_MESSAGE` event containing the message from
* the plugin, if a message type not handled by this controller is received.
* @implements {ContentController}
*/
export class PluginController {
......@@ -200,7 +211,10 @@ export class PluginController {
return this.uidCounter_++;
}
/** @return {!EventTarget} */
/**
* @return {!EventTarget}
* @override
*/
getEventTarget() {
return this.eventTarget_;
}
......@@ -482,8 +496,8 @@ export class PluginController {
resolver.resolve(null);
break;
default:
this.eventTarget_.dispatchEvent(
new CustomEvent('plugin-message', {detail: messageData}));
this.eventTarget_.dispatchEvent(new CustomEvent(
PluginControllerEventType.PLUGIN_MESSAGE, {detail: messageData}));
}
}
......
......@@ -12,7 +12,7 @@ import './viewer-pen-options.js';
import {EventTracker} from 'chrome://resources/js/event_tracker.m.js';
import {html, PolymerElement} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js';
import {InkController} from '../ink_controller.js';
import {InkController, InkControllerEventType} from '../ink_controller.js';
export class ViewerAnnotationsBarElement extends PolymerElement {
static get is() {
......@@ -67,13 +67,16 @@ export class ViewerAnnotationsBarElement extends PolymerElement {
}
this.tracker_.add(
this.inkController.getEventTarget(), 'set-annotation-undo-state',
this.inkController.getEventTarget(),
InkControllerEventType.SET_ANNOTATION_UNDO_STATE,
e => this.setAnnotationUndoState_(e));
this.tracker_.add(this.inkController.getEventTarget(), 'loaded', () => {
if (this.annotationTool_) {
this.inkController.setAnnotationTool(this.annotationTool_);
}
});
this.tracker_.add(
this.inkController.getEventTarget(), InkControllerEventType.LOADED,
() => {
if (this.annotationTool_) {
this.inkController.setAnnotationTool(this.annotationTool_);
}
});
}
/**
......
......@@ -24,13 +24,23 @@ import {Viewport} from './viewport.js';
*/
let ViewerInkHostElement;
/**
* Event types dispatched by the ink controller.
* @enum {string}
*/
export const InkControllerEventType = {
HAS_UNSAVED_CHANGES: 'InkControllerEventType.HAS_UNSAVED_CHANGES',
LOADED: 'InkControllerEventType.LOADED',
SET_ANNOTATION_UNDO_STATE: 'InkControllerEventType.SET_ANNOTATION_UNDO_STATE',
};
/**
* Controller for annotation mode, on Chrome OS only. Fires the following events
* from its event target:
* has-unsaved-changes: Fired to indicate there are ink annotations that have
* not been saved.
* set-annotation-undo-state: Contains information about whether undo or redo
* options are available.
* InkControllerEventType.HAS_UNSAVED_CHANGES: Fired to indicate there are ink
* annotations that have not been saved.
* InkControllerEventType.SET_ANNOTATION_UNDO_STATE: Contains information
* about whether undo or redo options are available.
* @implements {ContentController}
*/
export class InkController {
......@@ -72,7 +82,10 @@ export class InkController {
// TODO(crbug.com/1134208): Implement when InkController is a singleton.
}
/** @return {!EventTarget} */
/**
* @return {!EventTarget}
* @override
*/
getEventTarget() {
return this.eventTarget_;
}
......@@ -140,15 +153,18 @@ export class InkController {
this.inkHost_ = /** @type {!ViewerInkHostElement} */ (inkHost);
this.inkHost_.viewport = this.viewport_;
inkHost.addEventListener('stroke-added', e => {
this.eventTarget_.dispatchEvent(new CustomEvent('has-unsaved-changes'));
this.eventTarget_.dispatchEvent(
new CustomEvent(InkControllerEventType.HAS_UNSAVED_CHANGES));
});
inkHost.addEventListener('undo-state-changed', e => {
this.eventTarget_.dispatchEvent(
new CustomEvent('set-annotation-undo-state', {detail: e.detail}));
this.eventTarget_.dispatchEvent(new CustomEvent(
InkControllerEventType.SET_ANNOTATION_UNDO_STATE,
{detail: e.detail}));
});
}
return this.inkHost_.load(filename, data).then(() => {
this.eventTarget_.dispatchEvent(new CustomEvent('loaded'));
this.eventTarget_.dispatchEvent(
new CustomEvent(InkControllerEventType.LOADED));
});
}
......
......@@ -28,7 +28,7 @@ import {PluginController} from './controller.js';
import {ViewerPdfSidenavElement} from './elements/viewer-pdf-sidenav.js';
import {ViewerPdfToolbarNewElement} from './elements/viewer-pdf-toolbar-new.js';
// <if expr="chromeos">
import {InkController} from './ink_controller.js';
import {InkController, InkControllerEventType} from './ink_controller.js';
//</if>
import {LocalStorageProxyImpl} from './local_storage_proxy.js';
import {PDFMetrics, UserAction} from './metrics.js';
......@@ -388,7 +388,8 @@ export class PDFViewerElement extends PDFViewerBaseElement {
this.inkController_ = new InkController(
this.viewport, /** @type {!HTMLDivElement} */ (this.getContent()));
this.tracker.add(
this.inkController_.getEventTarget(), 'has-unsaved-changes',
this.inkController_.getEventTarget(),
InkControllerEventType.HAS_UNSAVED_CHANGES,
() => chrome.mimeHandlerPrivate.setShowBeforeUnloadDialog(true));
// </if>
......
......@@ -10,7 +10,7 @@ import {html, PolymerElement} from 'chrome://resources/polymer/v3_0/polymer/poly
import {BrowserApi, ZoomBehavior} from './browser_api.js';
import {FittingType, Point} from './constants.js';
import {ContentController, MessageData, PluginController} from './controller.js';
import {ContentController, MessageData, PluginController, PluginControllerEventType} from './controller.js';
import {PDFMetrics, UserAction} from './metrics.js';
import {OpenPdfParamsParser} from './open_pdf_params_parser.js';
import {LoadState} from './pdf_scripting_api.js';
......@@ -280,7 +280,8 @@ export class PDFViewerBaseElement extends PolymerElement {
this.currentController = pluginController;
this.tracker.add(
pluginController.getEventTarget(), 'plugin-message',
pluginController.getEventTarget(),
PluginControllerEventType.PLUGIN_MESSAGE,
e => this.handlePluginMessage(e));
document.body.addEventListener('change-page-and-xy', e => {
......
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