// Copyright 2018 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
import {sendWithPromise} from 'chrome://resources/js/cr.js';
export interface BookmarkData {
parentId: string;
title: string;
url: string;
}
export type AddBookmarkCallback = (node: chrome.bookmarks.BookmarkTreeNode) =>
void;
export interface BookmarkProxy {
addBookmark(data: BookmarkData): Promise<chrome.bookmarks.BookmarkTreeNode>;
/** @param id ID provided by callback when bookmark was added. */
removeBookmark(id: string): void;
toggleBookmarkBar(show: boolean): void;
isBookmarkBarShown(): Promise<boolean>;
}
export class BookmarkProxyImpl implements BookmarkProxy {
addBookmark(data: BookmarkData) {
return chrome.bookmarks.create(data);
}
removeBookmark(id: string) {
chrome.bookmarks.remove(id);
}
toggleBookmarkBar(show: boolean) {
chrome.send('toggleBookmarkBar', [show]);
}
isBookmarkBarShown() {
return sendWithPromise('isBookmarkBarShown');
}
static getInstance(): BookmarkProxy {
return bookmarkProxyInstance ||
(bookmarkProxyInstance = new BookmarkProxyImpl());
}
static setInstance(obj: BookmarkProxy) {
bookmarkProxyInstance = obj;
}
}
let bookmarkProxyInstance: BookmarkProxy|null = null;
// Wrapper for bookmark proxy to keep some additional states.
export class BookmarkBarManager {
private proxy_: BookmarkProxy;
private isBarShown_: boolean = false;
initialized: Promise<void>;
constructor() {
this.proxy_ = BookmarkProxyImpl.getInstance();
this.initialized = this.proxy_.isBookmarkBarShown().then((shown) => {
this.isBarShown_ = shown;
});
}
getShown(): boolean {
return this.isBarShown_;
}
setShown(show: boolean) {
this.isBarShown_ = show;
this.proxy_.toggleBookmarkBar(show);
}
static getInstance(): BookmarkBarManager {
return managerInstance || (managerInstance = new BookmarkBarManager());
}
static setInstance(obj: BookmarkBarManager) {
managerInstance = obj;
}
}
let managerInstance: BookmarkBarManager|null = null;