Chromium Code Reviews| Index: chrome/browser/resources/md_bookmarks/store.js | 
| diff --git a/chrome/browser/resources/md_bookmarks/store.js b/chrome/browser/resources/md_bookmarks/store.js | 
| index 16a22a44ddb95fbbe919a4f34491a7938e48318c..5c2718aa8ada50dc8589b61dca479afe2c03bd39 100644 | 
| --- a/chrome/browser/resources/md_bookmarks/store.js | 
| +++ b/chrome/browser/resources/md_bookmarks/store.js | 
| @@ -45,6 +45,9 @@ var BookmarksStore = Polymer({ | 
| /** @type {Set<string>} */ | 
| searchResultSet_: Object, | 
| + | 
| + /** @type {Set<number>} */ | 
| + selectedIndexSet_: Object, | 
| }, | 
| /** @private {Object} */ | 
| @@ -54,6 +57,7 @@ var BookmarksStore = Polymer({ | 
| attached: function() { | 
| this.documentListeners_ = { | 
| 'folder-open-changed': this.onFolderOpenChanged_.bind(this), | 
| + 'open-item': this.onItemOpened_.bind(this), | 
| 'search-term-changed': this.onSearchTermChanged_.bind(this), | 
| 'select-item': this.onItemSelected_.bind(this), | 
| 'selected-folder-changed': this.onSelectedFolderChanged_.bind(this), | 
| @@ -92,6 +96,7 @@ var BookmarksStore = Polymer({ | 
| this.rootNode = rootNode; | 
| this.idToNodeMap_ = {}; | 
| this.rootNode.path = 'rootNode'; | 
| + this.selectedIndexSet_ = new Set(); | 
| BookmarksStore.generatePaths(rootNode, 0); | 
| BookmarksStore.initNodes(this.rootNode, this.idToNodeMap_); | 
| @@ -187,6 +192,8 @@ var BookmarksStore = Polymer({ | 
| if (!this.displayedList) | 
| return; | 
| + this.selectedIndexSet_.clear(); | 
| + | 
| for (var i = 0; i < this.displayedList.length; i++) { | 
| if (!this.displayedList[i].isSelectedItem) | 
| continue; | 
| @@ -250,8 +257,10 @@ var BookmarksStore = Polymer({ | 
| startIndex = Math.min(this.anchorIndex_, selectedIndex); | 
| endIndex = Math.max(this.anchorIndex_, selectedIndex); | 
| } | 
| - for (var i = startIndex; i <= endIndex; i++) | 
| + for (var i = startIndex; i <= endIndex; i++) { | 
| this.set('displayedList.#' + i + '.isSelectedItem', true); | 
| + this.selectedIndexSet_.add(i); | 
| + } | 
| }, | 
| /** | 
| @@ -262,6 +271,7 @@ var BookmarksStore = Polymer({ | 
| selectItem_: function(item) { | 
| this.anchorIndex_ = this.getIndexInList_(item); | 
| this.set('displayedList.#' + this.anchorIndex_ + '.isSelectedItem', true); | 
| + this.selectedIndexSet_.add(this.anchorIndex_); | 
| }, | 
| ////////////////////////////////////////////////////////////////////////////// | 
| @@ -360,9 +370,19 @@ var BookmarksStore = Polymer({ | 
| if (!this.idToNodeMap_[id] || this.idToNodeMap_[id].url) | 
| id = this.rootNode.children[0].id; | 
| - var newFolder = this.idToNodeMap_[id]; | 
| - this.set(newFolder.path + '.isSelectedFolder', true); | 
| + var folder = this.idToNodeMap_[id]; | 
| + this.set(folder.path + '.isSelectedFolder', true); | 
| this.selectedId = id; | 
| + while (folder.parentId) { | 
| + folder = this.idToNodeMap_[folder.parentId]; | 
| + if (folder.isOpen) | 
| + continue; | 
| + | 
| + this.fire('folder-open-changed', { | 
| + id: folder.id, | 
| + open: true, | 
| + }); | 
| + } | 
| }, | 
| /** | 
| @@ -391,6 +411,28 @@ var BookmarksStore = Polymer({ | 
| else | 
| this.selectItem_(e.detail.item); | 
| }, | 
| + | 
| + /** | 
| + * @param {CustomEvent} e | 
| + * @private | 
| + */ | 
| + onItemOpened_: function(e) { | 
| + if (this.selectedIndexSet_.size == 1) { | 
| + var item = /** BookmarkTreeNode */ (e.detail); | 
| + // do the single event here | 
| + if (!item.url) | 
| + this.fire('selected-folder-changed', item.id); | 
| + else | 
| + chrome.tabs.create({url: item.url}); | 
| + } else { | 
| + for (let index of this.selectedIndexSet_) { | 
| 
 
tsergeant
2017/02/02 02:02:38
Chris and I just tried the old bookmark manager an
 
jiaxi
2017/02/02 03:07:03
Done.
 
 | 
| + if (!this.displayedList[index].url) | 
| + continue; | 
| + | 
| + chrome.tabs.create({url: this.displayedList[index].url}); | 
| + } | 
| + } | 
| + }, | 
| }); | 
| //////////////////////////////////////////////////////////////////////////////// |