diff --git b/third_party/closure_compiler/externs/chrome.js a/third_party/closure_compiler/externs/chrome.js
index 54cf6b1a2bcc..0619bdce01a4 100644
--- b/third_party/closure_compiler/externs/chrome.js
+++ a/third_party/closure_compiler/externs/chrome.js
@@ -562,51 +562,6 @@ chrome.webstore.onInstallStageChanged;
 chrome.webstore.onDownloadProgress;
 
 
-/**
- * @see https://developer.chrome.com/extensions/runtime.html
- * @const
- */
-chrome.runtime = {};
-
-
-/** @type {{message:(string|undefined)}|undefined} */
-chrome.runtime.lastError;
-
-
-/**
- * @param {string|!Object=} opt_extensionIdOrConnectInfo Either the
- *     extensionId to connect to, in which case connectInfo params can be
- *     passed in the next optional argument, or the connectInfo params.
- * @param {!Object=} opt_connectInfo The connectInfo object,
- *     if arg1 was the extensionId to connect to.
- * @return {!Port} New port.
- */
-chrome.runtime.connect = function(
-    opt_extensionIdOrConnectInfo, opt_connectInfo) {};
-
-
-/**
- * @param {string|*} extensionIdOrMessage Either the extensionId to send the
- *     message to, in which case the message is passed as the next arg, or the
- *     message itself.
- * @param {(*|!Object|function(*): void)=} opt_messageOrOptsOrCallback
- *     One of:
- *     The message, if arg1 was the extensionId.
- *     The options for message sending, if arg1 was the message and this
- *     argument is not a function.
- *     The callback, if arg1 was the message and this argument is a function.
- * @param {(!Object|function(*): void)=} opt_optsOrCallback
- *     Either the options for message sending, if arg2 was the message,
- *     or the callback.
- * @param {function(*): void=} opt_callback The callback function which
- *     takes a JSON response object sent by the handler of the request.
- * @return {undefined}
- */
-chrome.runtime.sendMessage = function(
-    extensionIdOrMessage, opt_messageOrOptsOrCallback, opt_optsOrCallback,
-    opt_callback) {};
-
-
 /**
  * Returns an object representing current load times. Note that the properties
  * on the object do not change and the function must be called again to get
diff --git b/third_party/closure_compiler/externs/chrome_extensions.js a/third_party/closure_compiler/externs/chrome_extensions.js
index 41b2f5b485c7..7110aaf8f223 100644
--- b/third_party/closure_compiler/externs/chrome_extensions.js
+++ a/third_party/closure_compiler/externs/chrome_extensions.js
@@ -233,72 +233,6 @@ if (Math.random() < 1) {  // always true but the compiler doesn't know that
 }
 
 
-/**
- * @see https://developer.chrome.com/extensions/accessibilityFeatures
- * @const
- */
-chrome.accessibilityFeatures = {};
-
-
-/** @type {!ChromeSetting} */
-chrome.accessibilityFeatures.spokenFeedback;
-
-
-/** @type {!ChromeSetting} */
-chrome.accessibilityFeatures.largeCursor;
-
-
-/** @type {!ChromeSetting} */
-chrome.accessibilityFeatures.stickyKeys;
-
-
-/** @type {!ChromeSetting} */
-chrome.accessibilityFeatures.highContrast;
-
-
-/** @type {!ChromeSetting} */
-chrome.accessibilityFeatures.screenMagnifier;
-
-
-/** @type {!ChromeSetting} */
-chrome.accessibilityFeatures.autoclick;
-
-
-/** @type {!ChromeSetting} */
-chrome.accessibilityFeatures.virtualKeyboard;
-
-
-/** @type {!ChromeSetting} */
-chrome.accessibilityFeatures.caretHighlight;
-
-
-/** @type {!ChromeSetting} */
-chrome.accessibilityFeatures.cursorHighlight;
-
-
-/** @type {!ChromeSetting} */
-chrome.accessibilityFeatures.cursorColor;
-
-
-/** @type {!ChromeSetting} */
-chrome.accessibilityFeatures.dockedMagnifier;
-
-
-/** @type {!ChromeSetting} */
-chrome.accessibilityFeatures.focusHighlight;
-
-
-/** @type {!ChromeSetting} */
-chrome.accessibilityFeatures.selectToSpeak;
-
-
-/** @type {!ChromeSetting} */
-chrome.accessibilityFeatures.switchAccess;
-
-
-/** @type {!ChromeSetting} */
-chrome.accessibilityFeatures.animationPolicy;
-
 
 /**
  * @const
@@ -2557,6 +2491,49 @@ chrome.extension.onRequest;
 /** @type {!ChromeEvent} */
 chrome.extension.onRequestExternal;
 
+/**
+ * @see https://developer.chrome.com/extensions/runtime.html
+ * @const
+ */
+chrome.runtime = {};
+
+
+/** @type {{message:(string|undefined)}|undefined} */
+chrome.runtime.lastError;
+
+
+/**
+ * @param {string|!Object=} opt_extensionIdOrConnectInfo Either the
+ *     extensionId to connect to, in which case connectInfo params can be
+ *     passed in the next optional argument, or the connectInfo params.
+ * @param {!Object=} opt_connectInfo The connectInfo object,
+ *     if arg1 was the extensionId to connect to.
+ * @return {!Port} New port.
+ */
+chrome.runtime.connect = function(
+    opt_extensionIdOrConnectInfo, opt_connectInfo) {};
+
+
+/**
+ * @param {string|*} extensionIdOrMessage Either the extensionId to send the
+ *     message to, in which case the message is passed as the next arg, or the
+ *     message itself.
+ * @param {(*|!Object|function(*): void)=} opt_messageOrOptsOrCallback
+ *     One of:
+ *     The message, if arg1 was the extensionId.
+ *     The options for message sending, if arg1 was the message and this
+ *     argument is not a function.
+ *     The callback, if arg1 was the message and this argument is a function.
+ * @param {(!Object|function(*): void)=} opt_optsOrCallback
+ *     Either the options for message sending, if arg2 was the message,
+ *     or the callback.
+ * @param {function(*): void=} opt_callback The callback function which
+ *     takes a JSON response object sent by the handler of the request.
+ * @return {undefined}
+ */
+chrome.runtime.sendMessage = function(
+    extensionIdOrMessage, opt_messageOrOptsOrCallback, opt_optsOrCallback,
+    opt_callback) {};
 
 
 /** @type {string} */
@@ -4380,151 +4357,6 @@ chrome.idle.getAutoLockDelay = function(callback) {};
 chrome.idle.onStateChanged;
 
 
-/**
- * Chrome Text-to-Speech API.
- * @const
- * @see https://developer.chrome.com/extensions/tts.html
- */
-chrome.tts = {};
-
-
-
-/**
- * An event from the TTS engine to communicate the status of an utterance.
- * @constructor
- */
-function TtsEvent() {}
-
-
-/** @type {string} */
-TtsEvent.prototype.type;
-
-
-/** @type {number} */
-TtsEvent.prototype.charIndex;
-
-
-/** @type {string} */
-TtsEvent.prototype.errorMessage;
-
-
-/**
- * The speech options for the TTS engine.
- * @record
- * @see https://developer.chrome.com/apps/tts#type-TtsOptions
- */
-function TtsOptions() {}
-
-/** @type {boolean|undefined} */
-TtsOptions.prototype.enqueue;
-
-/** @type {string|undefined} */
-TtsOptions.prototype.voiceName;
-
-/** @type {string|undefined} */
-TtsOptions.prototype.extensionId;
-
-/** @type {string|undefined} */
-TtsOptions.prototype.lang;
-
-/** @type {number|undefined} */
-TtsOptions.prototype.rate;
-
-/** @type {number|undefined} */
-TtsOptions.prototype.pitch;
-
-/** @type {number|undefined} */
-TtsOptions.prototype.volume;
-
-/** @type {!Array<string>|undefined} */
-TtsOptions.prototype.requiredEventTypes;
-
-/** @type {!Array<string>|undefined} */
-TtsOptions.prototype.desiredEventTypes;
-
-/** @type {!function(!TtsEvent)|undefined} */
-TtsOptions.prototype.onEvent;
-
-
-/**
- * A description of a voice available for speech synthesis.
- * @constructor
- */
-function TtsVoice() {}
-
-
-/** @type {string} */
-TtsVoice.prototype.voiceName;
-
-
-/** @type {string} */
-TtsVoice.prototype.lang;
-
-
-/** @type {string} */
-TtsVoice.prototype.gender;
-
-
-/** @type {string} */
-TtsVoice.prototype.extensionId;
-
-
-/** @type {Array<string>} */
-TtsVoice.prototype.eventTypes;
-
-
-/**
- * Gets an array of all available voices.
- * @param {function(Array<TtsVoice>)=} opt_callback An optional callback
- *     function.
- * @return {undefined}
- */
-chrome.tts.getVoices = function(opt_callback) {};
-
-
-/**
- * Checks if the engine is currently speaking.
- * @param {function(boolean)=} opt_callback The callback function.
- * @return {undefined}
- */
-chrome.tts.isSpeaking = function(opt_callback) {};
-
-
-/**
- * Speaks text using a text-to-speech engine.
- * @param {string} utterance The text to speak, either plain text or a complete,
- *     well-formed SSML document. Speech engines that do not support SSML will
- *     strip away the tags and speak the text. The maximum length of the text is
- *     32,768 characters.
- * @param {TtsOptions=} options The speech options.
- * @param {function()=} callback Called right away, before speech finishes.
- * @return {undefined}
- */
-chrome.tts.speak = function(utterance, options, callback) {};
-
-
-/**
- * Stops any current speech.
- * @return {undefined}
- */
-chrome.tts.stop = function() {};
-
-
-/**
- * @const
- * @see https://developer.chrome.com/extensions/ttsEngine.html
- */
-chrome.ttsEngine = {};
-
-
-/** @type {!ChromeEvent} */
-chrome.ttsEngine.onSpeak;
-
-
-/** @type {!ChromeEvent} */
-chrome.ttsEngine.onStop;
-
-
 /**
  * @const
  * @see https://developer.chrome.com/extensions/contentSettings.html
@@ -8474,642 +8306,6 @@ chrome.fileSystem.requestFileSystem = function(options, callback) {};
 chrome.fileSystem.getVolumeList = function(callback) {};
 
 
-/**
- * @const
- * @see https://developer.chrome.com/extensions/fileSystemProvider
- */
-chrome.fileSystemProvider = {};
-
-
-/**
- * @enum {string}
- * @see https://developer.chrome.com/extensions/fileSystemProvider#type-ChangeType
- */
-chrome.fileSystemProvider.ChangeType = {
-  CHANGED: '',
-  DELETED: '',
-};
-
-
-/**
- * @enum {string}
- * @see https://developer.chrome.com/extensions/fileSystemProvider#type-CommonActionId
- */
-chrome.fileSystemProvider.CommonActionId = {
-  OFFLINE_NOT_NECESSARY: '',
-  SAVE_FOR_OFFLINE: '',
-  SHARE: '',
-};
-
-
-/**
- * @enum {string}
- * @see https://developer.chrome.com/extensions/fileSystemProvider#type-OpenFileMode
- */
-chrome.fileSystemProvider.OpenFileMode = {
-  READ: '',
-  WRITE: '',
-};
-
-
-/**
- * @enum {string}
- * @see https://developer.chrome.com/extensions/fileSystemProvider#type-ProviderError
- */
-chrome.fileSystemProvider.ProviderError = {
-  ABORT: '',
-  ACCESS_DENIED: '',
-  EXISTS: '',
-  FAILED: '',
-  INVALID_OPERATION: '',
-  INVALID_URL: '',
-  IN_USE: '',
-  IO: '',
-  NOT_A_DIRECTORY: '',
-  NOT_A_FILE: '',
-  NOT_EMPTY: '',
-  NOT_FOUND: '',
-  NO_MEMORY: '',
-  NO_SPACE: '',
-  OK: '',
-  SECURITY: '',
-  TOO_MANY_OPENED: '',
-};
-
-
-/**
- * @constructor
- * @see https://developer.chrome.com/extensions/fileSystemProvider#type-EntryMetadata
- */
-chrome.fileSystemProvider.EntryMetadata = function() {};
-
-
-/** @type {boolean|undefined} */
-chrome.fileSystemProvider.EntryMetadata.prototype.isDirectory;
-
-
-/** @type {string|undefined} */
-chrome.fileSystemProvider.EntryMetadata.prototype.name;
-
-
-/** @type {number|undefined} */
-chrome.fileSystemProvider.EntryMetadata.prototype.size;
-
-
-/** @type {!Date|undefined} */
-chrome.fileSystemProvider.EntryMetadata.prototype.modificationTime;
-
-
-/** @type {string|undefined} */
-chrome.fileSystemProvider.EntryMetadata.prototype.mimeType;
-
-
-/** @type {string|undefined} */
-chrome.fileSystemProvider.EntryMetadata.prototype.thumbnail;
-
-
-/**
- * @constructor
- * @see https://developer.chrome.com/extensions/fileSystemProvider#type-FileSystemInfo
- */
-chrome.fileSystemProvider.FileSystemInfo = function() {};
-
-
-/** @type {string} */
-chrome.fileSystemProvider.FileSystemInfo.prototype.fileSystemId;
-
-
-/** @type {string} */
-chrome.fileSystemProvider.FileSystemInfo.prototype.displayName;
-
-
-/** @type {boolean} */
-chrome.fileSystemProvider.FileSystemInfo.prototype.writable;
-
-
-/** @type {number} */
-chrome.fileSystemProvider.FileSystemInfo.prototype.openedFilesLimit;
-
-
-/**
- * @type {!Array<{
- *   openRequestId: number,
- *   filePath: string,
- *   mode: !chrome.fileSystemProvider.OpenFileMode,
- * }>}
- */
-chrome.fileSystemProvider.FileSystemInfo.prototype.openedFiles;
-
-
-/** @type {boolean|undefined} */
-chrome.fileSystemProvider.FileSystemInfo.prototype.supportsNotifyTag;
-
-
-/**
- * @type {!Array<!{
- *   entryPath: string,
- *   recursive: boolean,
- *   lastTag: (string|undefined),
- * }>}
- */
-chrome.fileSystemProvider.FileSystemInfo.prototype.watchers;
-
-
-/**
- * @param {string} fileSystemId
- * @param {function(!chrome.fileSystemProvider.FileSystemInfo): void} callback
- * @see https://developer.chrome.com/extensions/fileSystemProvider#method-get
- */
-chrome.fileSystemProvider.get = function(fileSystemId, callback) {};
-
-
-/**
- * @param {function(!Array<!chrome.fileSystemProvider.FileSystemInfo>): void}
- *     callback
- * @see https://developer.chrome.com/extensions/fileSystemProvider#method-getAll
- */
-chrome.fileSystemProvider.getAll = function(callback) {};
-
-
-/**
- * @record
- * @see https://developer.chrome.com/extensions/fileSystemProvider#method-mount
- */
-chrome.fileSystemProvider.MountOptions;
-
-
-/** @type {string} */
-chrome.fileSystemProvider.MountOptions.prototype.fileSystemId;
-
-
-/** @type {string} */
-chrome.fileSystemProvider.MountOptions.prototype.displayName;
-
-
-/** @type {boolean|undefined} */
-chrome.fileSystemProvider.MountOptions.prototype.writable;
-
-
-/** @type {number|undefined} */
-chrome.fileSystemProvider.MountOptions.prototype.openedFilesLimit;
-
-
-/** @type {boolean|undefined} */
-chrome.fileSystemProvider.MountOptions.prototype.supportsNotifyTag;
-
-
-/** @type {boolean|undefined} */
-chrome.fileSystemProvider.MountOptions.prototype.persistent;
-
-
-/**
- * @param {!chrome.fileSystemProvider.MountOptions} options
- * @param {function(): void=} callback
- * @see https://developer.chrome.com/extensions/fileSystemProvider#method-mount
- */
-chrome.fileSystemProvider.mount = function(options, callback) {};
-
-
-/**
- * @record
- * @see https://developer.chrome.com/extensions/fileSystemProvider#method-notify
- */
-chrome.fileSystemProvider.NotifyOptions;
-
-
-/** @type {string} */
-chrome.fileSystemProvider.NotifyOptions.prototype.fileSystemId;
-
-
-/** @type {string} */
-chrome.fileSystemProvider.NotifyOptions.prototype.observedPath;
-
-
-/** @type {boolean} */
-chrome.fileSystemProvider.NotifyOptions.prototype.recursive;
-
-
-/** @type {!chrome.fileSystemProvider.ChangeType} */
-chrome.fileSystemProvider.NotifyOptions.prototype.changeType;
-
-
-/**
- * @type {!Array<{
- *   entryPath: string,
- *   changeType: !chrome.fileSystemProvider.ChangeType,
- * }>|undefined}
- */
-chrome.fileSystemProvider.NotifyOptions.prototype.changes;
-
-
-/** @type {string|undefined} */
-chrome.fileSystemProvider.NotifyOptions.prototype.tag;
-
-
-/**
- * @param {!chrome.fileSystemProvider.NotifyOptions} options
- * @param {function(): void=} callback
- * @see https://developer.chrome.com/extensions/fileSystemProvider#method-notify
- */
-chrome.fileSystemProvider.notify = function(options, callback) {};
-
-
-/**
- * @record
- * @see https://developer.chrome.com/extensions/fileSystemProvider#method-unmount
- */
-chrome.fileSystemProvider.UnmountOptions;
-
-
-/** @type {string} */
-chrome.fileSystemProvider.UnmountOptions.prototype.fileSystemId;
-
-
-/**
- * @param {!chrome.fileSystemProvider.UnmountOptions} options
- * @param {function(): void=} callback
- */
-chrome.fileSystemProvider.unmount = function(options, callback) {};
-
-/**
- * FSP events that don't "return" values to the caller via onSuccess.
- *
- * @interface
- * @template T
- * @extends {ChromeBaseEvent<function(
- *   T,
- *   function(): void,
- *   function(!chrome.fileSystemProvider.ProviderError): void
- * )>}
- */
-chrome.fileSystemProvider.VoidBaseEvent;
-
-/**
- * @interface
- * @extends {chrome.fileSystemProvider.VoidBaseEvent<{
- *   fileSystemId: string,
- *   requestId: number,
- *   operationRequestId: number,
- * }>}
- * @see https://developer.chrome.com/extensions/fileSystemProvider#event-onAbortRequested
- */
-chrome.fileSystemProvider.AbortRequestedEvent;
-
-
-/** @type {!chrome.fileSystemProvider.AbortRequestedEvent} */
-chrome.fileSystemProvider.onAbortRequested;
-
-
-/**
- * @interface
- * @extends {chrome.fileSystemProvider.VoidBaseEvent<{
- *   fileSystemId: string,
- *   requestId: number,
- *   entryPath: string,
- *   recursive: boolean,
- * }>}
- * @see https://developer.chrome.com/extensions/fileSystemProvider#event-onAddWatcherRequested
- */
-chrome.fileSystemProvider.AddWatcherRequestedEvent;
-
-
-/** @type {!chrome.fileSystemProvider.AddWatcherRequestedEvent} */
-chrome.fileSystemProvider.onAddWatcherRequested;
-
-
-/**
- * @interface
- * @extends {chrome.fileSystemProvider.VoidBaseEvent<{
- *   fileSystemId: string,
- *   requestId: number,
- *   openRequestId: number,
- * }>}
- * @see https://developer.chrome.com/extensions/fileSystemProvider#event-onCloseFileRequested
- */
-chrome.fileSystemProvider.CloseFileRequestedEvent;
-
-
-/** @type {!chrome.fileSystemProvider.CloseFileRequestedEvent} */
-chrome.fileSystemProvider.onCloseFileRequested;
-
-
-/**
- * @interface
- * @extends {chrome.fileSystemProvider.VoidBaseEvent<{
- *   fileSystemId: string,
- *   requestId: number,
- * }>}
- * @see https://developer.chrome.com/extensions/fileSystemProvider#event-onConfigureRequested
- */
-chrome.fileSystemProvider.ConfigureRequestedEvent;
-
-
-/** @type {!chrome.fileSystemProvider.ConfigureRequestedEvent} */
-chrome.fileSystemProvider.onConfigureRequested;
-
-
-/**
- * @interface
- * @extends {chrome.fileSystemProvider.VoidBaseEvent<{
- *   fileSystemId: string,
- *   requestId: number,
- *   sourcePath: string,
- *   targetPath: string,
- * }>}
- * @see https://developer.chrome.com/extensions/fileSystemProvider#event-onCopyEntryRequested
- */
-chrome.fileSystemProvider.CopyEntryRequestedEvent;
-
-
-/** @type {!chrome.fileSystemProvider.CopyEntryRequestedEvent} */
-chrome.fileSystemProvider.onCopyEntryRequested;
-
-
-/**
- * @interface
- * @extends {chrome.fileSystemProvider.VoidBaseEvent<{
- *   fileSystemId: string,
- *   requestId: number,
- *   directoryPath: string,
- *   recursive: boolean,
- * }>}
- * @see https://developer.chrome.com/extensions/fileSystemProvider#event-onCreateDirectoryRequested
- */
-chrome.fileSystemProvider.CreateDirectoryRequestedEvent;
-
-
-/** @type {!chrome.fileSystemProvider.CreateDirectoryRequestedEvent} */
-chrome.fileSystemProvider.onCreateDirectoryRequested;
-
-
-/**
- * @interface
- * @extends {chrome.fileSystemProvider.VoidBaseEvent<{
- *   fileSystemId: string,
- *   requestId: number,
- *   filePath: string,
- * }>}
- * @see https://developer.chrome.com/extensions/fileSystemProvider#event-onCreateFileRequested
- */
-chrome.fileSystemProvider.CreateFileRequestedEvent;
-
-
-/** @type {!chrome.fileSystemProvider.CreateFileRequestedEvent} */
-chrome.fileSystemProvider.onCreateFileRequested;
-
-
-/**
- * @interface
- * @extends {chrome.fileSystemProvider.VoidBaseEvent<{
- *   fileSystemId: string,
- *   requestId: number,
- *   entryPath: string,
- *   recursive: boolean,
- * }>}
- * @see https://developer.chrome.com/extensions/fileSystemProvider#event-onDeleteEntryRequested
- */
-chrome.fileSystemProvider.DeleteEntryRequestedEvent;
-
-
-/** @type {!chrome.fileSystemProvider.DeleteEntryRequestedEvent} */
-chrome.fileSystemProvider.onDeleteEntryRequested;
-
-
-/**
- * @interface
- * @extends {chrome.fileSystemProvider.VoidBaseEvent<{
- *   fileSystemId: string,
- *   requestId: number,
- *   entryPaths: !Array<string>,
- *   actionId: string,
- * }>}
- * @see https://developer.chrome.com/extensions/fileSystemProvider#event-onExecuteActionRequested
- */
-chrome.fileSystemProvider.ExecuteActionRequestedEvent;
-
-
-/** @type {!chrome.fileSystemProvider.ExecuteActionRequestedEvent} */
-chrome.fileSystemProvider.onExecuteActionRequested;
-
-
-/**
- * @interface
- * @extends {ChromeBaseEvent<function(
- *   {
- *     fileSystemId: string,
- *     requestId: number,
- *     entryPaths: !Array<string>,
- *   },
- *   function(
- *     !Array<!{
- *       id: (string|chrome.fileSystemProvider.CommonActionId),
- *       title: (string|undefined),
- *     }>
- *   ): void,
- *   function(!chrome.fileSystemProvider.ProviderError): void
- * )>}
- * @see https://developer.chrome.com/extensions/fileSystemProvider#event-onGetActionsRequested
- */
-chrome.fileSystemProvider.GetActionsRequestedEvent;
-
-
-/** @type {!chrome.fileSystemProvider.GetActionsRequestedEvent} */
-chrome.fileSystemProvider.onGetActionsRequested;
-
-
-/**
- * @interface
- * @extends {ChromeBaseEvent<function(
- *   {
- *     fileSystemId: string,
- *     requestId: number,
- *     entryPath: string,
- *     isDirectory: boolean,
- *     name: boolean,
- *     size: boolean,
- *     modificationTime: boolean,
- *     mimeType: boolean,
- *     thumbnail: boolean,
- *   },
- *   function(!chrome.fileSystemProvider.EntryMetadata): void,
- *   function(!chrome.fileSystemProvider.ProviderError): void
- * )>}
- * @see https://developer.chrome.com/extensions/fileSystemProvider#event-onGetMetadataRequested
- */
-chrome.fileSystemProvider.GetMetadataRequestedEvent;
-
-
-/** @type {!chrome.fileSystemProvider.GetMetadataRequestedEvent} */
-chrome.fileSystemProvider.onGetMetadataRequested;
-
-
-/**
- * @interface
- * @extends {ChromeBaseEvent<function(
- *   function(): void,
- *   function(!chrome.fileSystemProvider.ProviderError): void
- * )>}
- * @see https://developer.chrome.com/extensions/fileSystemProvider#event-onMountRequested
- */
-chrome.fileSystemProvider.MountRequestedEvent;
-
-
-/** @type {!chrome.fileSystemProvider.MountRequestedEvent} */
-chrome.fileSystemProvider.onMountRequested;
-
-
-/**
- * @interface
- * @extends {chrome.fileSystemProvider.VoidBaseEvent<{
- *   fileSystemId: string,
- *   requestId: number,
- *   sourcePath: string,
- *   targetPath: string,
- * }>}
- * @see https://developer.chrome.com/extensions/fileSystemProvider#event-onMoveEntryRequested
- */
-chrome.fileSystemProvider.MoveEntryRequestedEvent;
-
-
-/** @type {!chrome.fileSystemProvider.MoveEntryRequestedEvent} */
-chrome.fileSystemProvider.onMoveEntryRequested;
-
-
-/**
- * @interface
- * @extends {chrome.fileSystemProvider.VoidBaseEvent<{
- *   fileSystemId: string,
- *   requestId: number,
- *   filePath: string,
- *   mode: chrome.fileSystemProvider.OpenFileMode,
- * }>}
- * @see https://developer.chrome.com/extensions/fileSystemProvider#event-onOpenFileRequested
- */
-chrome.fileSystemProvider.OpenFileRequestedEvent;
-
-
-/** @type {!chrome.fileSystemProvider.OpenFileRequestedEvent} */
-chrome.fileSystemProvider.onOpenFileRequested;
-
-
-/**
- * @interface
- * @extends {ChromeBaseEvent<function(
- *   {
- *     fileSystemId: string,
- *     requestId: number,
- *     directoryPath: string,
- *     isDirectory: boolean,
- *     name: boolean,
- *     size: boolean,
- *     modificationTime: boolean,
- *     mimeType: boolean,
- *     thumbnail: boolean,
- *   },
- *   function(
- *     !Array<!chrome.fileSystemProvider.EntryMetadata>,
- *     boolean
- *   ): void,
- *   function(!chrome.fileSystemProvider.ProviderError): void
- * )>}
- * @see https://developer.chrome.com/extensions/fileSystemProvider#event-onReadDirectoryRequested
- */
-chrome.fileSystemProvider.ReadDirectoryRequestedEvent;
-
-
-/** @type {!chrome.fileSystemProvider.ReadDirectoryRequestedEvent} */
-chrome.fileSystemProvider.onReadDirectoryRequested;
-
-
-/**
- * @interface
- * @extends {ChromeBaseEvent<function(
- *   {
- *     fileSystemId: string,
- *     requestId: number,
- *     openRequestId: number,
- *     offset: number,
- *     length: number,
- *   },
- *   function(!ArrayBuffer, boolean): void,
- *   function(!chrome.fileSystemProvider.ProviderError): void
- * )>}
- * @see https://developer.chrome.com/extensions/fileSystemProvider#event-onReadFileRequested
- */
-chrome.fileSystemProvider.ReadFileRequestedEvent;
-
-
-/** @type {!chrome.fileSystemProvider.ReadFileRequestedEvent} */
-chrome.fileSystemProvider.onReadFileRequested;
-
-
-/**
- * @interface
- * @extends {chrome.fileSystemProvider.VoidBaseEvent<{
- *   fileSystemId: string,
- *   requestId: number,
- *   entryPath: string,
- *   recursive: boolean,
- * }>}
- * @see https://developer.chrome.com/extensions/fileSystemProvider#event-onRemoveWatcherRequested
- */
-chrome.fileSystemProvider.RemoveWatcherRequestedEvent;
-
-
-/** @type {!chrome.fileSystemProvider.RemoveWatcherRequestedEvent} */
-chrome.fileSystemProvider.onRemoveWatcherRequested;
-
-
-/**
- * @interface
- * @extends {chrome.fileSystemProvider.VoidBaseEvent<{
- *   fileSystemId: string,
- *   requestId: number,
- *   filePath: string,
- *   length: number,
- * }>}
- * @see https://developer.chrome.com/extensions/fileSystemProvider#event-onTruncateRequested
- */
-chrome.fileSystemProvider.TruncateRequestedEvent;
-
-
-/** @type {!chrome.fileSystemProvider.TruncateRequestedEvent} */
-chrome.fileSystemProvider.onTruncateRequested;
-
-
-/**
- * @interface
- * @extends {chrome.fileSystemProvider.VoidBaseEvent<{
- *   fileSystemId: string,
- *   requestId: number,
- * }>}
- * @see https://developer.chrome.com/extensions/fileSystemProvider#event-onUnmountRequested
- */
-chrome.fileSystemProvider.UnmountRequestedEvent;
-
-
-/** @type {!chrome.fileSystemProvider.UnmountRequestedEvent} */
-chrome.fileSystemProvider.onUnmountRequested;
-
-
-/**
- * @interface
- * @extends {chrome.fileSystemProvider.VoidBaseEvent<{
- *   fileSystemId: string,
- *   requestId: number,
- *   openRequestId: number,
- *   offset: number,
- *   data: !ArrayBuffer,
- * }>}
- * @see https://developer.chrome.com/extensions/fileSystemProvider#event-onWriteFileRequested
- */
-chrome.fileSystemProvider.WriteFileRequestedEvent;
-
-
-/** @type {!chrome.fileSystemProvider.WriteFileRequestedEvent} */
-chrome.fileSystemProvider.onWriteFileRequested;
-
-
 /**
  * @const
  * @see https://developer.chrome.com/apps/syncFileSystem
