blob: d04dfd87fe7d2927ae20de8a79917b3ebaf8d1e5 [file] [log] [blame]
// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
/**
* @interface
*/
export class Revealer {
/**
* @param {!Object} object
* @param {boolean=} omitFocus
* @return {!Promise}
*/
reveal(object, omitFocus) {
}
}
/**
* @param {?Object} revealable
* @param {boolean=} omitFocus
* @return {!Promise.<undefined>}
*/
export const reveal = function(revealable, omitFocus) {
if (!revealable) {
return Promise.reject(new Error('Can\'t reveal ' + revealable));
}
return self.runtime.allInstances(Revealer, revealable).then(reveal);
/**
* @param {!Array.<!Revealer>} revealers
* @return {!Promise.<undefined>}
*/
function reveal(revealers) {
const promises = [];
for (let i = 0; i < revealers.length; ++i) {
promises.push(revealers[i].reveal(/** @type {!Object} */ (revealable), omitFocus));
}
return Promise.race(promises);
}
};
/**
* @param {?Object} revealable
* @return {?string}
*/
export const revealDestination = function(revealable) {
const extension = self.runtime.extension(Revealer, revealable);
if (!extension) {
return null;
}
return extension.descriptor()['destination'];
};