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