blob: bd2ac0faaad05bca7fa662696519109337440910 [file] [log] [blame]
// 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.
import {sendWithPromise} from 'chrome://resources/js/cr.m.js';
type bookmarkData = {
parentId: string,
title: string,
url: string,
};
type AddBookmarkCallback = (node: chrome.bookmarks.BookmarkTreeNode) => void;
export interface BookmarkProxy {
addBookmark(data: bookmarkData, callback: AddBookmarkCallback): void;
/** @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, callback: AddBookmarkCallback) {
chrome.bookmarks.create(data, callback);
}
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;