OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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_toolbar_model.h" | 5 #include "chrome/browser/extensions/extension_toolbar_model.h" |
6 | 6 |
7 #include "chrome/browser/extensions/browser_event_router.h" | 7 #include "chrome/browser/extensions/browser_event_router.h" |
8 #include "chrome/browser/extensions/extension_prefs.h" | 8 #include "chrome/browser/extensions/extension_prefs.h" |
9 #include "chrome/browser/extensions/extension_service.h" | 9 #include "chrome/browser/extensions/extension_service.h" |
10 #include "chrome/browser/extensions/tab_helper.h" | 10 #include "chrome/browser/extensions/tab_helper.h" |
(...skipping 253 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
264 else | 264 else |
265 PopulateForNonActionBoxMode(); | 265 PopulateForNonActionBoxMode(); |
266 | 266 |
267 UpdatePrefs(); | 267 UpdatePrefs(); |
268 | 268 |
269 extensions_initialized_ = true; | 269 extensions_initialized_ = true; |
270 FOR_EACH_OBSERVER(Observer, observers_, ModelLoaded()); | 270 FOR_EACH_OBSERVER(Observer, observers_, ModelLoaded()); |
271 } | 271 } |
272 | 272 |
273 void ExtensionToolbarModel::PopulateForActionBoxMode() { | 273 void ExtensionToolbarModel::PopulateForActionBoxMode() { |
274 const extensions::ExtensionPrefs::ExtensionIdSet toolbar_order = | 274 const extensions::ExtensionPrefs::ExtensionIds toolbar_order = |
275 service_->extension_prefs()->GetToolbarOrder(); | 275 service_->extension_prefs()->GetToolbarOrder(); |
276 extensions::ExtensionPrefs::ExtensionIdSet action_box_order = | 276 extensions::ExtensionPrefs::ExtensionIds action_box_order = |
277 service_->extension_prefs()->GetActionBoxOrder(); | 277 service_->extension_prefs()->GetActionBoxOrder(); |
278 | 278 |
279 // Add all browser actions not already in the toolbar or action box | 279 // Add all browser actions not already in the toolbar or action box |
280 // to the action box (the prefs list may omit some extensions). | 280 // to the action box (the prefs list may omit some extensions). |
281 for (ExtensionSet::const_iterator iter = service_->extensions()->begin(); | 281 for (ExtensionSet::const_iterator iter = service_->extensions()->begin(); |
282 iter != service_->extensions()->end(); ++iter) { | 282 iter != service_->extensions()->end(); ++iter) { |
283 const Extension* extension = *iter; | 283 const Extension* extension = *iter; |
284 if (!extension->browser_action()) | 284 if (!extension->browser_action()) |
285 continue; | 285 continue; |
286 | 286 |
287 if (std::find(toolbar_order.begin(), toolbar_order.end(), | 287 if (std::find(toolbar_order.begin(), toolbar_order.end(), |
288 extension->id()) != toolbar_order.end()) | 288 extension->id()) != toolbar_order.end()) |
289 continue; | 289 continue; |
290 | 290 |
291 if (std::find(action_box_order.begin(), action_box_order.end(), | 291 if (std::find(action_box_order.begin(), action_box_order.end(), |
292 extension->id()) != action_box_order.end()) | 292 extension->id()) != action_box_order.end()) |
293 continue; | 293 continue; |
294 | 294 |
295 action_box_order.push_back(extension->id()); | 295 action_box_order.push_back(extension->id()); |
296 } | 296 } |
297 | 297 |
298 FillExtensionList(action_box_order, &action_box_menu_items_); | 298 FillExtensionList(action_box_order, &action_box_menu_items_); |
299 FillExtensionList(toolbar_order, &toolbar_items_); | 299 FillExtensionList(toolbar_order, &toolbar_items_); |
300 } | 300 } |
301 | 301 |
302 void ExtensionToolbarModel::PopulateForNonActionBoxMode() { | 302 void ExtensionToolbarModel::PopulateForNonActionBoxMode() { |
303 const extensions::ExtensionPrefs::ExtensionIdSet pref_order = | 303 const extensions::ExtensionPrefs::ExtensionIds pref_order = |
304 service_->extension_prefs()->GetToolbarOrder(); | 304 service_->extension_prefs()->GetToolbarOrder(); |
305 // Items that have a pref for their position. | 305 // Items that have a pref for their position. |
306 ExtensionList sorted; | 306 ExtensionList sorted; |
307 sorted.resize(pref_order.size(), NULL); | 307 sorted.resize(pref_order.size(), NULL); |
308 // The items that don't have a pref for their position. | 308 // The items that don't have a pref for their position. |
309 ExtensionList unsorted; | 309 ExtensionList unsorted; |
310 | 310 |
311 // Create the lists. | 311 // Create the lists. |
312 for (ExtensionSet::const_iterator it = service_->extensions()->begin(); | 312 for (ExtensionSet::const_iterator it = service_->extensions()->begin(); |
313 it != service_->extensions()->end(); ++it) { | 313 it != service_->extensions()->end(); ++it) { |
314 const Extension* extension = *it; | 314 const Extension* extension = *it; |
315 if (!extension->browser_action()) | 315 if (!extension->browser_action()) |
316 continue; | 316 continue; |
317 if (!service_->extension_prefs()->GetBrowserActionVisibility(extension)) | 317 if (!service_->extension_prefs()->GetBrowserActionVisibility(extension)) |
318 continue; | 318 continue; |
319 | 319 |
320 extensions::ExtensionPrefs::ExtensionIdSet::const_iterator pos = | 320 extensions::ExtensionPrefs::ExtensionIds::const_iterator pos = |
321 std::find(pref_order.begin(), pref_order.end(), extension->id()); | 321 std::find(pref_order.begin(), pref_order.end(), extension->id()); |
322 if (pos != pref_order.end()) | 322 if (pos != pref_order.end()) |
323 sorted[pos - pref_order.begin()] = extension; | 323 sorted[pos - pref_order.begin()] = extension; |
324 else | 324 else |
325 unsorted.push_back(make_scoped_refptr(extension)); | 325 unsorted.push_back(make_scoped_refptr(extension)); |
326 } | 326 } |
327 | 327 |
328 // Merge the lists. | 328 // Merge the lists. |
329 toolbar_items_.clear(); | 329 toolbar_items_.clear(); |
330 toolbar_items_.reserve(sorted.size() + unsorted.size()); | 330 toolbar_items_.reserve(sorted.size() + unsorted.size()); |
(...skipping 12 matching lines...) Expand all Loading... |
343 unsorted.end()); | 343 unsorted.end()); |
344 | 344 |
345 // Inform observers. | 345 // Inform observers. |
346 for (size_t i = 0; i < toolbar_items_.size(); i++) { | 346 for (size_t i = 0; i < toolbar_items_.size(); i++) { |
347 FOR_EACH_OBSERVER(Observer, observers_, | 347 FOR_EACH_OBSERVER(Observer, observers_, |
348 BrowserActionAdded(toolbar_items_[i], i)); | 348 BrowserActionAdded(toolbar_items_[i], i)); |
349 } | 349 } |
350 } | 350 } |
351 | 351 |
352 void ExtensionToolbarModel::FillExtensionList( | 352 void ExtensionToolbarModel::FillExtensionList( |
353 const extensions::ExtensionPrefs::ExtensionIdSet& order, | 353 const extensions::ExtensionPrefs::ExtensionIds& order, |
354 ExtensionList* list) { | 354 ExtensionList* list) { |
355 list->clear(); | 355 list->clear(); |
356 list->reserve(order.size()); | 356 list->reserve(order.size()); |
357 for (size_t i = 0; i < order.size(); ++i) { | 357 for (size_t i = 0; i < order.size(); ++i) { |
358 const extensions::Extension* extension = | 358 const extensions::Extension* extension = |
359 service_->GetExtensionById(order[i], false); | 359 service_->GetExtensionById(order[i], false); |
360 if (extension) | 360 if (extension) |
361 AddExtension(extension, list); | 361 AddExtension(extension, list); |
362 } | 362 } |
363 } | 363 } |
364 | 364 |
365 void ExtensionToolbarModel::UpdatePrefs() { | 365 void ExtensionToolbarModel::UpdatePrefs() { |
366 if (!service_->extension_prefs()) | 366 if (!service_->extension_prefs()) |
367 return; | 367 return; |
368 | 368 |
369 extensions::ExtensionPrefs::ExtensionIdSet toolbar_ids; | 369 extensions::ExtensionPrefs::ExtensionIds toolbar_ids; |
370 toolbar_ids.reserve(toolbar_items_.size()); | 370 toolbar_ids.reserve(toolbar_items_.size()); |
371 for (size_t i = 0; i < toolbar_items_.size(); ++i) | 371 for (size_t i = 0; i < toolbar_items_.size(); ++i) |
372 toolbar_ids.push_back(toolbar_items_[i]->id()); | 372 toolbar_ids.push_back(toolbar_items_[i]->id()); |
373 service_->extension_prefs()->SetToolbarOrder(toolbar_ids); | 373 service_->extension_prefs()->SetToolbarOrder(toolbar_ids); |
374 | 374 |
375 extensions::ExtensionPrefs::ExtensionIdSet action_box_ids; | 375 extensions::ExtensionPrefs::ExtensionIds action_box_ids; |
376 action_box_ids.reserve(action_box_menu_items_.size()); | 376 action_box_ids.reserve(action_box_menu_items_.size()); |
377 for (size_t i = 0; i < action_box_menu_items_.size(); ++i) | 377 for (size_t i = 0; i < action_box_menu_items_.size(); ++i) |
378 action_box_ids.push_back(action_box_menu_items_[i]->id()); | 378 action_box_ids.push_back(action_box_menu_items_[i]->id()); |
379 service_->extension_prefs()->SetActionBoxOrder(action_box_ids); | 379 service_->extension_prefs()->SetActionBoxOrder(action_box_ids); |
380 } | 380 } |
381 | 381 |
382 int ExtensionToolbarModel::IncognitoIndexToOriginal(int incognito_index) { | 382 int ExtensionToolbarModel::IncognitoIndexToOriginal(int incognito_index) { |
383 int original_index = 0, i = 0; | 383 int original_index = 0, i = 0; |
384 for (ExtensionList::iterator iter = toolbar_items_.begin(); | 384 for (ExtensionList::iterator iter = toolbar_items_.begin(); |
385 iter != toolbar_items_.end(); | 385 iter != toolbar_items_.end(); |
(...skipping 12 matching lines...) Expand all Loading... |
398 for (ExtensionList::iterator iter = toolbar_items_.begin(); | 398 for (ExtensionList::iterator iter = toolbar_items_.begin(); |
399 iter != toolbar_items_.end(); | 399 iter != toolbar_items_.end(); |
400 ++iter, ++i) { | 400 ++iter, ++i) { |
401 if (original_index == i) | 401 if (original_index == i) |
402 break; | 402 break; |
403 if (service_->IsIncognitoEnabled((*iter)->id())) | 403 if (service_->IsIncognitoEnabled((*iter)->id())) |
404 ++incognito_index; | 404 ++incognito_index; |
405 } | 405 } |
406 return incognito_index; | 406 return incognito_index; |
407 } | 407 } |
OLD | NEW |