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

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

Issue 10696210: Making ExtensionService less dependent on Browser. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fixed clang build. Created 8 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 | Annotate | Revision Log
OLDNEW
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_service.h" 5 #include "chrome/browser/extensions/extension_service.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <set> 8 #include <set>
9 9
10 #include "base/basictypes.h" 10 #include "base/basictypes.h"
(...skipping 25 matching lines...) Expand all
36 #include "chrome/browser/extensions/app_notification_manager.h" 36 #include "chrome/browser/extensions/app_notification_manager.h"
37 #include "chrome/browser/extensions/app_sync_data.h" 37 #include "chrome/browser/extensions/app_sync_data.h"
38 #include "chrome/browser/extensions/apps_promo.h" 38 #include "chrome/browser/extensions/apps_promo.h"
39 #include "chrome/browser/extensions/component_loader.h" 39 #include "chrome/browser/extensions/component_loader.h"
40 #include "chrome/browser/extensions/crx_installer.h" 40 #include "chrome/browser/extensions/crx_installer.h"
41 #include "chrome/browser/extensions/default_apps_trial.h" 41 #include "chrome/browser/extensions/default_apps_trial.h"
42 #include "chrome/browser/extensions/extension_browser_event_router.h" 42 #include "chrome/browser/extensions/extension_browser_event_router.h"
43 #include "chrome/browser/extensions/extension_data_deleter.h" 43 #include "chrome/browser/extensions/extension_data_deleter.h"
44 #include "chrome/browser/extensions/extension_disabled_ui.h" 44 #include "chrome/browser/extensions/extension_disabled_ui.h"
45 #include "chrome/browser/extensions/extension_error_reporter.h" 45 #include "chrome/browser/extensions/extension_error_reporter.h"
46 #include "chrome/browser/extensions/extension_error_ui.h"
46 #include "chrome/browser/extensions/extension_font_settings_api.h" 47 #include "chrome/browser/extensions/extension_font_settings_api.h"
47 #include "chrome/browser/extensions/extension_global_error.h"
48 #include "chrome/browser/extensions/extension_host.h" 48 #include "chrome/browser/extensions/extension_host.h"
49 #include "chrome/browser/extensions/extension_input_ime_api.h" 49 #include "chrome/browser/extensions/extension_input_ime_api.h"
50 #include "chrome/browser/extensions/extension_managed_mode_api.h" 50 #include "chrome/browser/extensions/extension_managed_mode_api.h"
51 #include "chrome/browser/extensions/extension_management_api.h" 51 #include "chrome/browser/extensions/extension_management_api.h"
52 #include "chrome/browser/extensions/extension_preference_api.h" 52 #include "chrome/browser/extensions/extension_preference_api.h"
53 #include "chrome/browser/extensions/extension_process_manager.h" 53 #include "chrome/browser/extensions/extension_process_manager.h"
54 #include "chrome/browser/extensions/extension_processes_api.h" 54 #include "chrome/browser/extensions/extension_processes_api.h"
55 #include "chrome/browser/extensions/extension_sorting.h" 55 #include "chrome/browser/extensions/extension_sorting.h"
56 #include "chrome/browser/extensions/extension_special_storage_policy.h" 56 #include "chrome/browser/extensions/extension_special_storage_policy.h"
57 #include "chrome/browser/extensions/extension_sync_data.h" 57 #include "chrome/browser/extensions/extension_sync_data.h"
(...skipping 11 matching lines...) Expand all
69 #include "chrome/browser/net/chrome_url_request_context.h" 69 #include "chrome/browser/net/chrome_url_request_context.h"
70 #include "chrome/browser/prefs/pref_service.h" 70 #include "chrome/browser/prefs/pref_service.h"
71 #include "chrome/browser/profiles/profile.h" 71 #include "chrome/browser/profiles/profile.h"
72 #include "chrome/browser/profiles/profile_manager.h" 72 #include "chrome/browser/profiles/profile_manager.h"
73 #include "chrome/browser/search_engines/template_url_service.h" 73 #include "chrome/browser/search_engines/template_url_service.h"
74 #include "chrome/browser/search_engines/template_url_service_factory.h" 74 #include "chrome/browser/search_engines/template_url_service_factory.h"
75 #include "chrome/browser/themes/theme_service.h" 75 #include "chrome/browser/themes/theme_service.h"
76 #include "chrome/browser/themes/theme_service_factory.h" 76 #include "chrome/browser/themes/theme_service_factory.h"
77 #include "chrome/browser/ui/browser.h" 77 #include "chrome/browser/ui/browser.h"
78 #include "chrome/browser/ui/browser_finder.h" 78 #include "chrome/browser/ui/browser_finder.h"
79 #include "chrome/browser/ui/chrome_pages.h"
80 #include "chrome/browser/ui/global_error/global_error_service.h"
81 #include "chrome/browser/ui/global_error/global_error_service_factory.h"
82 #include "chrome/browser/ui/webui/chrome_url_data_manager.h" 79 #include "chrome/browser/ui/webui/chrome_url_data_manager.h"
83 #include "chrome/browser/ui/webui/favicon_source.h" 80 #include "chrome/browser/ui/webui/favicon_source.h"
84 #include "chrome/browser/ui/webui/ntp/thumbnail_source.h" 81 #include "chrome/browser/ui/webui/ntp/thumbnail_source.h"
85 #include "chrome/common/child_process_logging.h" 82 #include "chrome/common/child_process_logging.h"
86 #include "chrome/common/chrome_notification_types.h" 83 #include "chrome/common/chrome_notification_types.h"
87 #include "chrome/common/chrome_paths.h" 84 #include "chrome/common/chrome_paths.h"
88 #include "chrome/common/chrome_switches.h" 85 #include "chrome/common/chrome_switches.h"
89 #include "chrome/common/chrome_version_info.h" 86 #include "chrome/common/chrome_version_info.h"
90 #include "chrome/common/extensions/extension.h" 87 #include "chrome/common/extensions/extension.h"
91 #include "chrome/common/extensions/extension_error_utils.h" 88 #include "chrome/common/extensions/extension_error_utils.h"
(...skipping 1604 matching lines...) Expand 10 before | Expand all | Expand 10 after
1696 } 1693 }
1697 IdentifyAlertableExtensions(); 1694 IdentifyAlertableExtensions();
1698 } 1695 }
1699 1696
1700 void ExtensionService::IdentifyAlertableExtensions() { 1697 void ExtensionService::IdentifyAlertableExtensions() {
1701 CHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 1698 CHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
1702 1699
1703 // Build up the lists of extensions that require acknowledgment. If this is 1700 // Build up the lists of extensions that require acknowledgment. If this is
1704 // the first time, grandfather extensions that would have caused 1701 // the first time, grandfather extensions that would have caused
1705 // notification. 1702 // notification.
1706 extension_global_error_.reset(new ExtensionGlobalError(this)); 1703 extension_error_ui_.reset(ExtensionErrorUI::Create(this));
1707 1704
1708 bool did_show_alert = false; 1705 bool did_show_alert = false;
1709 if (PopulateExtensionGlobalError(extension_global_error_.get())) { 1706 if (PopulateExtensionErrorUI(extension_error_ui_.get())) {
1710 if (extension_prefs_->SetAlertSystemFirstRun()) { 1707 if (extension_prefs_->SetAlertSystemFirstRun()) {
1711 CHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 1708 CHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
1712 Browser* browser = browser::FindLastActiveWithProfile(profile_); 1709 did_show_alert = extension_error_ui_->ShowErrorInBubbleView();
1713 if (browser) {
1714 extension_global_error_->ShowBubbleView(browser);
1715 did_show_alert = true;
1716 }
1717 } else { 1710 } else {
1718 // First run. Just acknowledge all the extensions, silently, by 1711 // First run. Just acknowledge all the extensions, silently, by
1719 // shortcutting the display of the UI and going straight to the 1712 // shortcutting the display of the UI and going straight to the
1720 // callback for pressing the Accept button. 1713 // callback for pressing the Accept button.
1721 HandleExtensionAlertAccept(); 1714 HandleExtensionAlertAccept();
1722 } 1715 }
1723 } 1716 }
1724 1717
1725 if (!did_show_alert) 1718 if (!did_show_alert)
1726 extension_global_error_.reset(); 1719 extension_error_ui_.reset();
1727 } 1720 }
1728 1721
1729 bool ExtensionService::PopulateExtensionGlobalError( 1722 bool ExtensionService::PopulateExtensionErrorUI(
1730 ExtensionGlobalError* extension_global_error) { 1723 ExtensionErrorUI* extension_error_ui) {
1731 bool needs_alert = false; 1724 bool needs_alert = false;
1732 for (ExtensionSet::const_iterator iter = extensions_.begin(); 1725 for (ExtensionSet::const_iterator iter = extensions_.begin();
1733 iter != extensions_.end(); ++iter) { 1726 iter != extensions_.end(); ++iter) {
1734 const Extension* e = *iter; 1727 const Extension* e = *iter;
1735 if (Extension::IsExternalLocation(e->location())) { 1728 if (Extension::IsExternalLocation(e->location())) {
1736 if (!e->is_hosted_app()) { 1729 if (!e->is_hosted_app()) {
1737 if (!extension_prefs_->IsExternalExtensionAcknowledged(e->id())) { 1730 if (!extension_prefs_->IsExternalExtensionAcknowledged(e->id())) {
1738 extension_global_error->AddExternalExtension(e->id()); 1731 extension_error_ui->AddExternalExtension(e->id());
1739 needs_alert = true; 1732 needs_alert = true;
1740 } 1733 }
1741 } 1734 }
1742 } 1735 }
1743 if (extension_prefs_->IsExtensionBlacklisted(e->id())) { 1736 if (extension_prefs_->IsExtensionBlacklisted(e->id())) {
1744 if (!extension_prefs_->IsBlacklistedExtensionAcknowledged(e->id())) { 1737 if (!extension_prefs_->IsBlacklistedExtensionAcknowledged(e->id())) {
1745 extension_global_error->AddBlacklistedExtension(e->id()); 1738 extension_error_ui->AddBlacklistedExtension(e->id());
1746 needs_alert = true; 1739 needs_alert = true;
1747 } 1740 }
1748 } 1741 }
1749 if (extension_prefs_->IsExtensionOrphaned(e->id())) { 1742 if (extension_prefs_->IsExtensionOrphaned(e->id())) {
1750 if (!extension_prefs_->IsOrphanedExtensionAcknowledged(e->id())) { 1743 if (!extension_prefs_->IsOrphanedExtensionAcknowledged(e->id())) {
1751 extension_global_error->AddOrphanedExtension(e->id()); 1744 extension_error_ui->AddOrphanedExtension(e->id());
1752 needs_alert = true; 1745 needs_alert = true;
1753 } 1746 }
1754 } 1747 }
1755 } 1748 }
1756 return needs_alert; 1749 return needs_alert;
1757 } 1750 }
1758 1751
1759 void ExtensionService::HandleExtensionAlertClosed() { 1752 void ExtensionService::HandleExtensionAlertClosed() {
1760 extension_global_error_.reset(); 1753 extension_error_ui_.reset();
1761 } 1754 }
1762 1755
1763 void ExtensionService::HandleExtensionAlertAccept() { 1756 void ExtensionService::HandleExtensionAlertAccept() {
1764 const ExtensionIdSet *extension_ids = 1757 const ExtensionIdSet *extension_ids =
1765 extension_global_error_->get_external_extension_ids(); 1758 extension_error_ui_->get_external_extension_ids();
1766 for (ExtensionIdSet::const_iterator iter = extension_ids->begin(); 1759 for (ExtensionIdSet::const_iterator iter = extension_ids->begin();
1767 iter != extension_ids->end(); ++iter) { 1760 iter != extension_ids->end(); ++iter) {
1768 AcknowledgeExternalExtension(*iter); 1761 AcknowledgeExternalExtension(*iter);
1769 } 1762 }
1770 extension_ids = extension_global_error_->get_blacklisted_extension_ids(); 1763 extension_ids = extension_error_ui_->get_blacklisted_extension_ids();
1771 for (ExtensionIdSet::const_iterator iter = extension_ids->begin(); 1764 for (ExtensionIdSet::const_iterator iter = extension_ids->begin();
1772 iter != extension_ids->end(); ++iter) { 1765 iter != extension_ids->end(); ++iter) {
1773 extension_prefs_->AcknowledgeBlacklistedExtension(*iter); 1766 extension_prefs_->AcknowledgeBlacklistedExtension(*iter);
1774 } 1767 }
1775 extension_ids = extension_global_error_->get_orphaned_extension_ids(); 1768 extension_ids = extension_error_ui_->get_orphaned_extension_ids();
1776 for (ExtensionIdSet::const_iterator iter = extension_ids->begin(); 1769 for (ExtensionIdSet::const_iterator iter = extension_ids->begin();
1777 iter != extension_ids->end(); ++iter) { 1770 iter != extension_ids->end(); ++iter) {
1778 extension_prefs_->AcknowledgeOrphanedExtension(*iter); 1771 extension_prefs_->AcknowledgeOrphanedExtension(*iter);
1779 } 1772 }
1780 } 1773 }
1781 1774
1782 void ExtensionService::AcknowledgeExternalExtension(const std::string& id) { 1775 void ExtensionService::AcknowledgeExternalExtension(const std::string& id) {
1783 extension_prefs_->AcknowledgeExternalExtension(id); 1776 extension_prefs_->AcknowledgeExternalExtension(id);
1784 } 1777 }
1785 1778
1786 void ExtensionService::HandleExtensionAlertDetails(Browser* browser) { 1779 void ExtensionService::HandleExtensionAlertDetails() {
1787 DCHECK(browser); 1780 extension_error_ui_->ShowExtensions();
1788 chrome::ShowExtensions(browser);
1789 } 1781 }
1790 1782
1791 void ExtensionService::UnloadExtension( 1783 void ExtensionService::UnloadExtension(
1792 const std::string& extension_id, 1784 const std::string& extension_id,
1793 extension_misc::UnloadedExtensionReason reason) { 1785 extension_misc::UnloadedExtensionReason reason) {
1794 // Make sure the extension gets deleted after we return from this function. 1786 // Make sure the extension gets deleted after we return from this function.
1795 scoped_refptr<const Extension> extension( 1787 scoped_refptr<const Extension> extension(
1796 GetExtensionByIdInternal(extension_id, true, true, false)); 1788 GetExtensionByIdInternal(extension_id, true, true, false));
1797 1789
1798 // This method can be called via PostTask, so the extension may have been 1790 // This method can be called via PostTask, so the extension may have been
(...skipping 764 matching lines...) Expand 10 before | Expand all | Expand 10 after
2563 2555
2564 // To coexist with certain unit tests that don't have a work-thread message 2556 // To coexist with certain unit tests that don't have a work-thread message
2565 // loop available at ExtensionService shutdown, we lazy-initialize this 2557 // loop available at ExtensionService shutdown, we lazy-initialize this
2566 // object so that those cases neither create nor destroy an 2558 // object so that those cases neither create nor destroy an
2567 // APIResourceController. 2559 // APIResourceController.
2568 if (!api_resource_controller_.get()) { 2560 if (!api_resource_controller_.get()) {
2569 api_resource_controller_.reset(new extensions::APIResourceController()); 2561 api_resource_controller_.reset(new extensions::APIResourceController());
2570 } 2562 }
2571 return api_resource_controller_.get(); 2563 return api_resource_controller_.get();
2572 } 2564 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698