summaryrefslogtreecommitdiffstats
path: root/chromium/chrome/browser/resources/welcome/shared/bookmark_proxy.js
blob: 42bf80607364fbff727829c1d6ef90a881265c17 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
// 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('welcome', 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 {welcome.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 {welcome.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,
  };
});