| // Copyright 2018 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. |
| |
| cr.define('nux', function() { |
| /** |
| * @typedef {{ |
| * parentId: string, |
| * title: string, |
| * url: string, |
| * }} |
| */ |
| let bookmarkData; |
| |
| /** @interface */ |
| class BookmarkProxy { |
| /** |
| * @param {!bookmarkData} data |
| * @param {!Function} callback |
| */ |
| addBookmark(data, callback) {} |
| |
| /** @param {string} id ID provided by callback when bookmark was added. */ |
| removeBookmark(id) {} |
| |
| /** @param {boolean} show */ |
| toggleBookmarkBar(show) {} |
| |
| /** @return {!Promise<boolean>} */ |
| isBookmarkBarShown() {} |
| } |
| |
| /** @implements {nux.BookmarkProxy} */ |
| class BookmarkProxyImpl { |
| /** @override */ |
| addBookmark(data, callback) { |
| chrome.bookmarks.create(data, callback); |
| } |
| |
| /** @override */ |
| removeBookmark(id) { |
| chrome.bookmarks.remove(id); |
| } |
| |
| /** @override */ |
| toggleBookmarkBar(show) { |
| chrome.send('toggleBookmarkBar', [show]); |
| } |
| |
| /** @override */ |
| isBookmarkBarShown() { |
| return cr.sendWithPromise('isBookmarkBarShown'); |
| } |
| } |
| |
| cr.addSingletonGetter(BookmarkProxyImpl); |
| |
| // Wrapper for bookmark proxy to keep some additional states. |
| class BookmarkBarManager { |
| constructor() { |
| /** @private {nux.BookmarkProxy} */ |
| this.proxy_ = BookmarkProxyImpl.getInstance(); |
| |
| /** @private {boolean} */ |
| this.isBarShown_ = false; |
| |
| /** @type {!Promise} */ |
| this.initialized = this.proxy_.isBookmarkBarShown().then(shown => { |
| this.isBarShown_ = shown; |
| }); |
| } |
| |
| /** @return {boolean} */ |
| getShown() { |
| return this.isBarShown_; |
| } |
| |
| /** @param {boolean} show */ |
| setShown(show) { |
| this.isBarShown_ = show; |
| this.proxy_.toggleBookmarkBar(show); |
| } |
| } |
| |
| cr.addSingletonGetter(BookmarkBarManager); |
| |
| return { |
| BookmarkProxy: BookmarkProxy, |
| BookmarkProxyImpl: BookmarkProxyImpl, |
| BookmarkBarManager: BookmarkBarManager, |
| }; |
| }); |