// 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. /** * Configuration of the Gallery window. * @const * @type {Object} */ var windowCreateOptions = { id: 'gallery', outerBounds: { minWidth: 860, minHeight: 554 }, frame: { color: '#1E2023' }, hidden: true }; /** * Backgound object. This is necessary for AppWindowWrapper. * @type {!BackgroundBase} */ var background = new BackgroundBase(); /** * Wrapper of gallery window. * @type {SingletonAppWindowWrapper} */ var gallery = new SingletonAppWindowWrapper('gallery.html', windowCreateOptions); /** * Opens gallery window. * @param {!Array} urls List of URL to show. * @return {!Promise} Promise to be fulfilled on success, or rejected on error. */ function openGalleryWindow(urls) { return new Promise(function(fulfill, reject) { util.URLsToEntries(urls).then(function(result) { fulfill(util.entriesToURLs(result.entries)); }).catch(reject); }).then(function(urls) { if (urls.length === 0) return Promise.reject('No file to open.'); // Opens a window. return new Promise(function(fulfill, reject) { gallery.launch( {urls: urls}, false, fulfill.bind(null, gallery)); }).then(function(gallery) { var galleryDocument = gallery.rawAppWindow.contentWindow.document; if (galleryDocument.readyState == 'complete') return gallery; return new Promise(function(fulfill, reject) { galleryDocument.addEventListener( 'DOMContentLoaded', fulfill.bind(null, gallery)); }); }); }).then(function(gallery) { // If the window is minimized, we need to restore it first. if (gallery.rawAppWindow.isMinimized()) gallery.rawAppWindow.restore(); gallery.rawAppWindow.show(); return gallery.rawAppWindow.contentWindow.appID; }).catch(function(error) { console.error('Launch failed' + error.stack || error); return Promise.reject(error); }); } background.setLaunchHandler(openGalleryWindow);