Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(916)

Side by Side Diff: chrome/browser/resources/md_extensions/service.js

Issue 1447183005: [MD Extensions] Fix item sorting (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Michael's Created 5 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 cr.define('extensions', function() { 5 cr.define('extensions', function() {
6 'use strict'; 6 'use strict';
7 7
8 /** 8 /**
9 * Compares two extensions to determine which should come first in the list.
10 * @param {chrome.developerPrivate.ExtensionInfo} a
11 * @param {chrome.developerPrivate.ExtensionInfo} b
12 * @return {number}
13 */
14 var compareExtensions = function(a, b) {
15 function compare(x, y) {
16 return x < y ? -1 : (x > y ? 1 : 0);
17 }
18 function compareLocation(x, y) {
19 if (x.location == y.location)
20 return 0;
21 if (x.location == chrome.developerPrivate.Location.UNPACKED)
22 return -1;
23 if (y.location == chrome.developerPrivate.Location.UNPACKED)
24 return 1;
25 return 0;
26 }
27 return compareLocation(a, b) ||
28 compare(a.name.toLowerCase(), b.name.toLowerCase()) ||
29 compare(a.id, b.id);
30 };
31
32 /**
33 * @constructor 9 * @constructor
34 * @implements {extensions.ItemDelegate} 10 * @implements {extensions.ItemDelegate}
35 * @implements {extensions.SidebarDelegate} 11 * @implements {extensions.SidebarDelegate}
36 */ 12 */
37 function Service() {} 13 function Service() {}
38 14
39 Service.prototype = { 15 Service.prototype = {
40 /** @private {boolean} */ 16 /** @private {boolean} */
41 promptIsShowing_: false, 17 promptIsShowing_: false,
42 18
43 /** @param {extensions.Manager} manager */ 19 /** @param {extensions.Manager} manager */
44 managerReady: function(manager) { 20 managerReady: function(manager) {
21 /** @private {extensions.Manager} */
45 this.manager_ = manager; 22 this.manager_ = manager;
23 /** @private {extensions.Sidebar} */
46 this.sidebar_ = manager.sidebar; 24 this.sidebar_ = manager.sidebar;
47 this.sidebar_.setDelegate(this); 25 this.sidebar_.setDelegate(this);
48 chrome.developerPrivate.onProfileStateChanged.addListener( 26 chrome.developerPrivate.onProfileStateChanged.addListener(
49 this.onProfileStateChanged_.bind(this)); 27 this.onProfileStateChanged_.bind(this));
50 chrome.developerPrivate.onItemStateChanged.addListener( 28 chrome.developerPrivate.onItemStateChanged.addListener(
51 this.onItemStateChanged_.bind(this)); 29 this.onItemStateChanged_.bind(this));
52 chrome.developerPrivate.getExtensionsInfo( 30 chrome.developerPrivate.getExtensionsInfo(
53 {includeDisabled: true, includeTerminated: true}, 31 {includeDisabled: true, includeTerminated: true},
54 function(extensions) { 32 function(extensions) {
55 extensions.sort(compareExtensions); 33 /** @private {Array<chrome.developerPrivate.ExtensionInfo>} */
56 this.extensions_ = extensions; 34 this.extensions_ = extensions;
57 for (let extension of extensions) 35 for (let extension of extensions)
58 this.manager_.addItem(extension, this); 36 this.manager_.addItem(extension, this);
59 }.bind(this)); 37 }.bind(this));
60 chrome.developerPrivate.getProfileConfiguration( 38 chrome.developerPrivate.getProfileConfiguration(
61 this.onProfileStateChanged_.bind(this)); 39 this.onProfileStateChanged_.bind(this));
62 }, 40 },
63 41
64 /** 42 /**
65 * @param {chrome.developerPrivate.ProfileInfo} profileInfo 43 * @param {chrome.developerPrivate.ProfileInfo} profileInfo
66 * @private 44 * @private
67 */ 45 */
68 onProfileStateChanged_: function(profileInfo) { 46 onProfileStateChanged_: function(profileInfo) {
47 /** @private {chrome.developerPrivate.ProfileInfo} */
69 this.profileInfo_ = profileInfo; 48 this.profileInfo_ = profileInfo;
70 this.sidebar_.inDevMode = profileInfo.inDeveloperMode; 49 this.sidebar_.inDevMode = profileInfo.inDeveloperMode;
71 this.manager_.forEachItem(function(item) { 50 this.manager_.forEachItem(function(item) {
72 item.inDevMode = profileInfo.inDeveloperMode; 51 item.inDevMode = profileInfo.inDeveloperMode;
73 }); 52 });
74 }, 53 },
75 54
76 /** 55 /**
77 * @param {chrome.developerPrivate.EventData} eventData 56 * @param {chrome.developerPrivate.EventData} eventData
78 * @private 57 * @private
(...skipping 18 matching lines...) Expand all
97 var existing = this.manager_.getItem(eventData.extensionInfo.id); 76 var existing = this.manager_.getItem(eventData.extensionInfo.id);
98 if (existing) { 77 if (existing) {
99 existing.data = eventData.extensionInfo; 78 existing.data = eventData.extensionInfo;
100 } else { 79 } else {
101 // If there's no existing item in the list, there shouldn't be an 80 // If there's no existing item in the list, there shouldn't be an
102 // extension with the same id in the data. 81 // extension with the same id in the data.
103 var currentIndex = this.extensions_.findIndex(function(extension) { 82 var currentIndex = this.extensions_.findIndex(function(extension) {
104 return extension.id == eventData.extensionInfo.id; 83 return extension.id == eventData.extensionInfo.id;
105 }); 84 });
106 assert(currentIndex == -1); 85 assert(currentIndex == -1);
107 var newIndex = this.extensions_.findIndex(function(extension) { 86
108 return compareExtensions(extension, 87 this.extensions_.push(eventData.extensionInfo);
109 assert(eventData.extensionInfo)) > 0; 88 this.manager_.addItem(eventData.extensionInfo, this);
110 });
111 newIndex = newIndex == -1 ? this.extensions_.length : newIndex;
112 this.extensions_.splice(newIndex, 0, eventData.extensionInfo);
113 this.manager_.addItem(eventData.extensionInfo, this, newIndex);
114 } 89 }
115 break; 90 break;
116 case EventType.UNINSTALLED: 91 case EventType.UNINSTALLED:
117 var currentIndex = this.extensions_.findIndex(function(extension) { 92 var currentIndex = this.extensions_.findIndex(function(extension) {
118 return extension.id == eventData.item_id; 93 return extension.id == eventData.item_id;
119 }); 94 });
120 this.extensions_.splice(currentIndex, 1); 95 this.extensions_.splice(currentIndex, 1);
121 this.manager_.removeItem(eventData.item_id); 96 this.manager_.removeItem(eventData.item_id);
122 break; 97 break;
123 default: 98 default:
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after
190 /** @override */ 165 /** @override */
191 updateAllExtensions: function() { 166 updateAllExtensions: function() {
192 chrome.developerPrivate.autoUpdate(); 167 chrome.developerPrivate.autoUpdate();
193 }, 168 },
194 }; 169 };
195 170
196 cr.addSingletonGetter(Service); 171 cr.addSingletonGetter(Service);
197 172
198 return {Service: Service}; 173 return {Service: Service};
199 }); 174 });
OLDNEW
« no previous file with comments | « chrome/browser/resources/md_extensions/manager.js ('k') | chrome/test/data/webui/extensions/cr_extensions_browsertest.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698