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

Side by Side Diff: chrome/browser/extensions/extension_shelf_model.cc

Issue 159202: add mole info to toolstrip definition and enable moles (Closed)
Patch Set: ready for review Created 11 years, 5 months 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 (c) 2009 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2009 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 #include "chrome/browser/extensions/extension_shelf_model.h" 5 #include "chrome/browser/extensions/extension_shelf_model.h"
6 6
7 #include "base/stl_util-inl.h" 7 #include "base/stl_util-inl.h"
8 #include "chrome/browser/browser.h" 8 #include "chrome/browser/browser.h"
9 #include "chrome/browser/profile.h" 9 #include "chrome/browser/profile.h"
10 #include "chrome/browser/extensions/extension_host.h" 10 #include "chrome/browser/extensions/extension_host.h"
(...skipping 24 matching lines...) Expand all
35 AddExtensions(service->extensions()); 35 AddExtensions(service->extensions());
36 SortToolstrips(); 36 SortToolstrips();
37 } 37 }
38 } 38 }
39 } 39 }
40 40
41 ExtensionShelfModel::~ExtensionShelfModel() { 41 ExtensionShelfModel::~ExtensionShelfModel() {
42 while (observers_.size()) 42 while (observers_.size())
43 observers_.RemoveObserver(observers_.GetElementAt(0)); 43 observers_.RemoveObserver(observers_.GetElementAt(0));
44 44
45 STLDeleteContainerPairFirstPointers(toolstrips_.begin(), toolstrips_.end()); 45 ExtensionToolstrips::iterator t;
46 for (t = toolstrips_.begin(); t != toolstrips_.end(); ++t)
47 delete t->host;
46 toolstrips_.clear(); 48 toolstrips_.clear();
47 } 49 }
48 50
49 void ExtensionShelfModel::AddObserver(ExtensionShelfModelObserver* observer) { 51 void ExtensionShelfModel::AddObserver(ExtensionShelfModelObserver* observer) {
50 observers_.AddObserver(observer); 52 observers_.AddObserver(observer);
51 } 53 }
52 54
53 void ExtensionShelfModel::RemoveObserver( 55 void ExtensionShelfModel::RemoveObserver(
54 ExtensionShelfModelObserver* observer) { 56 ExtensionShelfModelObserver* observer) {
55 observers_.RemoveObserver(observer); 57 observers_.RemoveObserver(observer);
56 } 58 }
57 59
58 void ExtensionShelfModel::AppendToolstrip(ExtensionHost* toolstrip) { 60 void ExtensionShelfModel::AppendToolstrip(const ToolstripItem& toolstrip) {
59 InsertToolstripAt(count(), toolstrip, NULL); 61 InsertToolstripAt(count(), toolstrip);
60 } 62 }
61 63
62 void ExtensionShelfModel::InsertToolstripAt(int index, 64 void ExtensionShelfModel::InsertToolstripAt(int index,
63 ExtensionHost* toolstrip, 65 const ToolstripItem& toolstrip) {
64 void* data) { 66 toolstrips_.insert(toolstrips_.begin() + index, toolstrip);
65 toolstrips_.insert(toolstrips_.begin() + index,
66 ToolstripItem(toolstrip, data));
67 if (ready_) { 67 if (ready_) {
68 FOR_EACH_OBSERVER(ExtensionShelfModelObserver, observers_, 68 FOR_EACH_OBSERVER(ExtensionShelfModelObserver, observers_,
69 ToolstripInsertedAt(toolstrip, index)); 69 ToolstripInsertedAt(toolstrip.host, index));
70 } 70 }
71 } 71 }
72 72
73 void ExtensionShelfModel::RemoveToolstripAt(int index) { 73 void ExtensionShelfModel::RemoveToolstripAt(int index) {
74 ExtensionHost* toolstrip = ToolstripAt(index); 74 ExtensionHost* host = ToolstripAt(index);
75 FOR_EACH_OBSERVER(ExtensionShelfModelObserver, observers_, 75 FOR_EACH_OBSERVER(ExtensionShelfModelObserver, observers_,
76 ToolstripRemovingAt(toolstrip, index)); 76 ToolstripRemovingAt(host, index));
77 toolstrips_.erase(toolstrips_.begin() + index); 77 toolstrips_.erase(toolstrips_.begin() + index);
78 delete toolstrip; 78 delete host;
79 } 79 }
80 80
81 void ExtensionShelfModel::MoveToolstripAt(int index, int to_index) { 81 void ExtensionShelfModel::MoveToolstripAt(int index, int to_index) {
82 DCHECK(index >= 0); 82 DCHECK(index >= 0);
83 DCHECK(to_index >= 0); 83 DCHECK(to_index >= 0);
84 if (index == to_index) 84 if (index == to_index)
85 return; 85 return;
86 86
87 ToolstripItem toolstrip = toolstrips_[index]; 87 ToolstripItem toolstrip = toolstrips_[index];
88 toolstrips_.erase(toolstrips_.begin() + index); 88 toolstrips_.erase(toolstrips_.begin() + index);
89 toolstrips_.insert(toolstrips_.begin() + to_index, toolstrip); 89 toolstrips_.insert(toolstrips_.begin() + to_index, toolstrip);
90 90
91 FOR_EACH_OBSERVER(ExtensionShelfModelObserver, observers_, 91 FOR_EACH_OBSERVER(ExtensionShelfModelObserver, observers_,
92 ToolstripMoved(toolstrip.first, index, to_index)); 92 ToolstripMoved(toolstrip.host, index, to_index));
93 93
94 UpdatePrefs(); 94 UpdatePrefs();
95 } 95 }
96 96
97 int ExtensionShelfModel::IndexOfToolstrip(ExtensionHost* toolstrip) { 97 int ExtensionShelfModel::IndexOfToolstrip(ExtensionHost* toolstrip) {
98 ExtensionToolstrips::iterator i; 98 ExtensionToolstrips::iterator i;
99 for (i = toolstrips_.begin(); i != toolstrips_.end(); ++i) { 99 for (i = toolstrips_.begin(); i != toolstrips_.end(); ++i) {
100 if (i->first == toolstrip) 100 if (i->host == toolstrip)
101 return i - toolstrips_.begin(); 101 return i - toolstrips_.begin();
102 } 102 }
103 return -1; 103 return -1;
104 } 104 }
105 105
106 ExtensionHost* ExtensionShelfModel::ToolstripAt(int index) { 106 ExtensionHost* ExtensionShelfModel::ToolstripAt(int index) {
107 DCHECK(index >= 0); 107 DCHECK(index >= 0);
108 return toolstrips_[index].first; 108 return toolstrips_[index].host;
109 }
110
111 Extension::ToolstripInfo* ExtensionShelfModel::ToolstripInfoAt(int index) {
112 DCHECK(index >= 0);
113 return &(toolstrips_[index].info);
109 } 114 }
110 115
111 void* ExtensionShelfModel::ToolstripDataAt(int index) { 116 void* ExtensionShelfModel::ToolstripDataAt(int index) {
112 DCHECK(index >= 0); 117 DCHECK(index >= 0);
113 return toolstrips_[index].second; 118 return toolstrips_[index].data;
114 } 119 }
115 120
116 void ExtensionShelfModel::SetToolstripDataAt(int index, void* data) { 121 void ExtensionShelfModel::SetToolstripDataAt(int index, void* data) {
117 DCHECK(index >= 0); 122 DCHECK(index >= 0);
118 toolstrips_[index].second = data; 123 toolstrips_[index].data = data;
119 } 124 }
120 125
121 void ExtensionShelfModel::Observe(NotificationType type, 126 void ExtensionShelfModel::Observe(NotificationType type,
122 const NotificationSource& source, 127 const NotificationSource& source,
123 const NotificationDetails& details) { 128 const NotificationDetails& details) {
124 switch (type.value) { 129 switch (type.value) {
125 case NotificationType::EXTENSIONS_LOADED: 130 case NotificationType::EXTENSIONS_LOADED:
126 if (ready_) 131 if (ready_)
127 AddExtensions(Details<ExtensionList>(details).ptr()); 132 AddExtensions(Details<ExtensionList>(details).ptr());
128 break; 133 break;
(...skipping 18 matching lines...) Expand all
147 } 152 }
148 } 153 }
149 154
150 void ExtensionShelfModel::AddExtension(Extension* extension) { 155 void ExtensionShelfModel::AddExtension(Extension* extension) {
151 ExtensionProcessManager* manager = 156 ExtensionProcessManager* manager =
152 browser_->profile()->GetExtensionProcessManager(); 157 browser_->profile()->GetExtensionProcessManager();
153 DCHECK(manager); 158 DCHECK(manager);
154 if (!manager) 159 if (!manager)
155 return; 160 return;
156 161
157 for (std::vector<std::string>::const_iterator toolstrip_path = 162 for (std::vector<Extension::ToolstripInfo>::const_iterator toolstrip =
158 extension->toolstrips().begin(); 163 extension->toolstrips().begin();
159 toolstrip_path != extension->toolstrips().end(); ++toolstrip_path) { 164 toolstrip != extension->toolstrips().end(); ++toolstrip) {
160 GURL url = extension->GetResourceURL(*toolstrip_path); 165 GURL url = toolstrip->toolstrip;
161 ExtensionHost* host = manager->CreateView(extension, url, browser_); 166 ToolstripItem item;
162 AppendToolstrip(host); 167 item.host = manager->CreateView(extension, url, browser_);
168 item.info = *toolstrip;
169 item.data = NULL;
170 AppendToolstrip(item);
163 } 171 }
164 } 172 }
165 173
166 void ExtensionShelfModel::AddExtensions(const ExtensionList* extensions) { 174 void ExtensionShelfModel::AddExtensions(const ExtensionList* extensions) {
167 if (extensions->size()) { 175 if (extensions->size()) {
168 ExtensionList::const_iterator extension = extensions->begin(); 176 ExtensionList::const_iterator extension = extensions->begin();
169 for (; extension != extensions->end(); ++extension) 177 for (; extension != extensions->end(); ++extension)
170 AddExtension(*extension); 178 AddExtension(*extension);
171 } 179 }
172 } 180 }
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
208 ExtensionToolstrips copy = 216 ExtensionToolstrips copy =
209 ExtensionToolstrips(toolstrips_.begin(), toolstrips_.end()); 217 ExtensionToolstrips(toolstrips_.begin(), toolstrips_.end());
210 toolstrips_.clear(); 218 toolstrips_.clear();
211 219
212 // Go through the urls and find the matching toolstrip, re-adding it to the 220 // Go through the urls and find the matching toolstrip, re-adding it to the
213 // new list in the proper order. 221 // new list in the proper order.
214 for (size_t i = 0; i < urls.size(); ++i) { 222 for (size_t i = 0; i < urls.size(); ++i) {
215 GURL& url = urls[i]; 223 GURL& url = urls[i];
216 for (ExtensionToolstrips::iterator toolstrip = copy.begin(); 224 for (ExtensionToolstrips::iterator toolstrip = copy.begin();
217 toolstrip != copy.end(); ++toolstrip) { 225 toolstrip != copy.end(); ++toolstrip) {
218 if (url == (*toolstrip).first->GetURL()) { 226 if (url == toolstrip->host->GetURL()) {
219 // Note that it's technically possible for the same URL to appear in 227 // Note that it's technically possible for the same URL to appear in
220 // multiple toolstrips, so we don't do any testing for uniqueness. 228 // multiple toolstrips, so we don't do any testing for uniqueness.
221 toolstrips_.push_back(*toolstrip); 229 toolstrips_.push_back(*toolstrip);
222 230
223 // Remove the toolstrip from the list so we don't have to iterate over 231 // Remove the toolstrip from the list so we don't have to iterate over
224 // it next time. 232 // it next time.
225 copy.erase(toolstrip); 233 copy.erase(toolstrip);
226 break; 234 break;
227 } 235 }
228 } 236 }
229 } 237 }
230 238
231 // Any toolstrips remaining in |copy| were somehow missing from the prefs, 239 // Any toolstrips remaining in |copy| were somehow missing from the prefs,
232 // so just append them to the end. 240 // so just append them to the end.
233 for (ExtensionToolstrips::iterator toolstrip = copy.begin(); 241 for (ExtensionToolstrips::iterator toolstrip = copy.begin();
234 toolstrip != copy.end(); ++toolstrip) { 242 toolstrip != copy.end(); ++toolstrip) {
235 toolstrips_.push_back(*toolstrip); 243 toolstrips_.push_back(*toolstrip);
236 } 244 }
237 245
238 FOR_EACH_OBSERVER(ExtensionShelfModelObserver, observers_, 246 FOR_EACH_OBSERVER(ExtensionShelfModelObserver, observers_,
239 ShelfModelReloaded()); 247 ShelfModelReloaded());
240 } 248 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698