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

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

Issue 282103003: Moved IS_EPHEMERAL flag to extension prefs (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix up file header Created 6 years, 7 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) 2013 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2013 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 <iterator> 8 #include <iterator>
9 #include <set> 9 #include <set>
10 10
(...skipping 559 matching lines...) Expand 10 before | Expand all | Expand 10 after
570 // details. 570 // details.
571 if (extension && extension->from_bookmark()) 571 if (extension && extension->from_bookmark())
572 creation_flags |= Extension::FROM_BOOKMARK; 572 creation_flags |= Extension::FROM_BOOKMARK;
573 573
574 if (extension && extension->was_installed_by_default()) 574 if (extension && extension->was_installed_by_default())
575 creation_flags |= Extension::WAS_INSTALLED_BY_DEFAULT; 575 creation_flags |= Extension::WAS_INSTALLED_BY_DEFAULT;
576 576
577 if (extension && extension->was_installed_by_oem()) 577 if (extension && extension->was_installed_by_oem())
578 creation_flags |= Extension::WAS_INSTALLED_BY_OEM; 578 creation_flags |= Extension::WAS_INSTALLED_BY_OEM;
579 579
580 if (extension && extension->is_ephemeral()) 580 if (extension)
581 creation_flags |= Extension::IS_EPHEMERAL; 581 installer->set_is_ephemeral(extension_prefs_->IsEphemeralApp(id));
582 582
583 installer->set_creation_flags(creation_flags); 583 installer->set_creation_flags(creation_flags);
584 584
585 installer->set_delete_source(file_ownership_passed); 585 installer->set_delete_source(file_ownership_passed);
586 installer->set_install_cause(extension_misc::INSTALL_CAUSE_UPDATE); 586 installer->set_install_cause(extension_misc::INSTALL_CAUSE_UPDATE);
587 installer->InstallCrx(extension_path); 587 installer->InstallCrx(extension_path);
588 588
589 if (out_crx_installer) 589 if (out_crx_installer)
590 *out_crx_installer = installer.get(); 590 *out_crx_installer = installer.get();
591 591
(...skipping 136 matching lines...) Expand 10 before | Expand all | Expand 10 after
728 if (!GetFileTaskRunner()->PostTask( 728 if (!GetFileTaskRunner()->PostTask(
729 FROM_HERE, 729 FROM_HERE,
730 base::Bind(&extensions::file_util::UninstallExtension, 730 base::Bind(&extensions::file_util::UninstallExtension,
731 install_directory_, 731 install_directory_,
732 extension_id))) 732 extension_id)))
733 NOTREACHED(); 733 NOTREACHED();
734 } 734 }
735 735
736 // Do not remove the data of ephemeral apps. They will be garbage collected by 736 // Do not remove the data of ephemeral apps. They will be garbage collected by
737 // EphemeralAppService. 737 // EphemeralAppService.
738 if (!extension->is_ephemeral()) 738 if (!extension_prefs_->IsEphemeralApp(extension_id))
739 extensions::DataDeleter::StartDeleting(profile_, extension.get()); 739 extensions::DataDeleter::StartDeleting(profile_, extension.get());
740 740
741 UntrackTerminatedExtension(extension_id); 741 UntrackTerminatedExtension(extension_id);
742 742
743 // Notify interested parties that we've uninstalled this extension. 743 // Notify interested parties that we've uninstalled this extension.
744 content::NotificationService::current()->Notify( 744 content::NotificationService::current()->Notify(
745 chrome::NOTIFICATION_EXTENSION_UNINSTALLED, 745 chrome::NOTIFICATION_EXTENSION_UNINSTALLED,
746 content::Source<Profile>(profile_), 746 content::Source<Profile>(profile_),
747 content::Details<const Extension>(extension.get())); 747 content::Details<const Extension>(extension.get()));
748 748
(...skipping 787 matching lines...) Expand 10 before | Expand all | Expand 10 after
1536 1536
1537 VLOG(1) << "AddComponentExtension " << extension->name(); 1537 VLOG(1) << "AddComponentExtension " << extension->name();
1538 if (!old_version.IsValid() || !old_version.Equals(*extension->version())) { 1538 if (!old_version.IsValid() || !old_version.Equals(*extension->version())) {
1539 VLOG(1) << "Component extension " << extension->name() << " (" 1539 VLOG(1) << "Component extension " << extension->name() << " ("
1540 << extension->id() << ") installing/upgrading from '" 1540 << extension->id() << ") installing/upgrading from '"
1541 << old_version_string << "' to " << extension->version()->GetString(); 1541 << old_version_string << "' to " << extension->version()->GetString();
1542 1542
1543 AddNewOrUpdatedExtension(extension, 1543 AddNewOrUpdatedExtension(extension,
1544 Extension::ENABLED_COMPONENT, 1544 Extension::ENABLED_COMPONENT,
1545 extensions::NOT_BLACKLISTED, 1545 extensions::NOT_BLACKLISTED,
1546 false,
1546 syncer::StringOrdinal(), 1547 syncer::StringOrdinal(),
1547 std::string()); 1548 std::string());
1548 return; 1549 return;
1549 } 1550 }
1550 1551
1551 AddExtension(extension); 1552 AddExtension(extension);
1552 } 1553 }
1553 1554
1554 void ExtensionService::UpdateActivePermissions(const Extension* extension) { 1555 void ExtensionService::UpdateActivePermissions(const Extension* extension) {
1555 // If the extension has used the optional permissions API, it will have a 1556 // If the extension has used the optional permissions API, it will have a
(...skipping 146 matching lines...) Expand 10 before | Expand all | Expand 10 after
1702 // crash_keys::SetActiveExtensions is per-process. See 1703 // crash_keys::SetActiveExtensions is per-process. See
1703 // http://crbug.com/355029. 1704 // http://crbug.com/355029.
1704 crash_keys::SetActiveExtensions(extension_ids); 1705 crash_keys::SetActiveExtensions(extension_ids);
1705 } 1706 }
1706 1707
1707 void ExtensionService::OnExtensionInstalled( 1708 void ExtensionService::OnExtensionInstalled(
1708 const Extension* extension, 1709 const Extension* extension,
1709 const syncer::StringOrdinal& page_ordinal, 1710 const syncer::StringOrdinal& page_ordinal,
1710 bool has_requirement_errors, 1711 bool has_requirement_errors,
1711 extensions::BlacklistState blacklist_state, 1712 extensions::BlacklistState blacklist_state,
1713 bool is_ephemeral,
1712 bool wait_for_idle) { 1714 bool wait_for_idle) {
1713 CHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 1715 CHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
1714 1716
1715 const std::string& id = extension->id(); 1717 const std::string& id = extension->id();
1716 bool initial_enable = ShouldEnableOnInstall(extension); 1718 bool initial_enable = ShouldEnableOnInstall(extension);
1717 std::string install_parameter; 1719 std::string install_parameter;
1718 const extensions::PendingExtensionInfo* pending_extension_info = NULL; 1720 const extensions::PendingExtensionInfo* pending_extension_info = NULL;
1719 if ((pending_extension_info = pending_extension_manager()->GetById(id))) { 1721 if ((pending_extension_info = pending_extension_manager()->GetById(id))) {
1720 if (!pending_extension_info->ShouldAllowInstall(extension)) { 1722 if (!pending_extension_info->ShouldAllowInstall(extension)) {
1721 pending_extension_manager()->Remove(id); 1723 pending_extension_manager()->Remove(id);
(...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after
1796 AcknowledgeExternalExtension(extension->id()); 1798 AcknowledgeExternalExtension(extension->id());
1797 const Extension::State initial_state = 1799 const Extension::State initial_state =
1798 initial_enable ? Extension::ENABLED : Extension::DISABLED; 1800 initial_enable ? Extension::ENABLED : Extension::DISABLED;
1799 const bool blacklisted_for_malware = 1801 const bool blacklisted_for_malware =
1800 blacklist_state == extensions::BLACKLISTED_MALWARE; 1802 blacklist_state == extensions::BLACKLISTED_MALWARE;
1801 if (ShouldDelayExtensionUpdate(id, wait_for_idle)) { 1803 if (ShouldDelayExtensionUpdate(id, wait_for_idle)) {
1802 extension_prefs_->SetDelayedInstallInfo( 1804 extension_prefs_->SetDelayedInstallInfo(
1803 extension, 1805 extension,
1804 initial_state, 1806 initial_state,
1805 blacklisted_for_malware, 1807 blacklisted_for_malware,
1808 is_ephemeral,
1806 extensions::ExtensionPrefs::DELAY_REASON_WAIT_FOR_IDLE, 1809 extensions::ExtensionPrefs::DELAY_REASON_WAIT_FOR_IDLE,
1807 page_ordinal, 1810 page_ordinal,
1808 install_parameter); 1811 install_parameter);
1809 1812
1810 // Transfer ownership of |extension|. 1813 // Transfer ownership of |extension|.
1811 delayed_installs_.Insert(extension); 1814 delayed_installs_.Insert(extension);
1812 1815
1813 // Notify observers that app update is available. 1816 // Notify observers that app update is available.
1814 FOR_EACH_OBSERVER(extensions::UpdateObserver, update_observers_, 1817 FOR_EACH_OBSERVER(extensions::UpdateObserver, update_observers_,
1815 OnAppUpdateAvailable(extension)); 1818 OnAppUpdateAvailable(extension));
1816 return; 1819 return;
1817 } 1820 }
1818 1821
1819 extensions::SharedModuleService::ImportStatus status = 1822 extensions::SharedModuleService::ImportStatus status =
1820 shared_module_service_->SatisfyImports(extension); 1823 shared_module_service_->SatisfyImports(extension);
1821 if (installs_delayed_for_gc_) { 1824 if (installs_delayed_for_gc_) {
1822 extension_prefs_->SetDelayedInstallInfo( 1825 extension_prefs_->SetDelayedInstallInfo(
1823 extension, 1826 extension,
1824 initial_state, 1827 initial_state,
1825 blacklisted_for_malware, 1828 blacklisted_for_malware,
1829 is_ephemeral,
1826 extensions::ExtensionPrefs::DELAY_REASON_GC, 1830 extensions::ExtensionPrefs::DELAY_REASON_GC,
1827 page_ordinal, 1831 page_ordinal,
1828 install_parameter); 1832 install_parameter);
1829 delayed_installs_.Insert(extension); 1833 delayed_installs_.Insert(extension);
1830 } else if (status != SharedModuleService::IMPORT_STATUS_OK) { 1834 } else if (status != SharedModuleService::IMPORT_STATUS_OK) {
1831 if (status == SharedModuleService::IMPORT_STATUS_UNSATISFIED) { 1835 if (status == SharedModuleService::IMPORT_STATUS_UNSATISFIED) {
1832 extension_prefs_->SetDelayedInstallInfo( 1836 extension_prefs_->SetDelayedInstallInfo(
1833 extension, 1837 extension,
1834 initial_state, 1838 initial_state,
1835 blacklisted_for_malware, 1839 blacklisted_for_malware,
1840 is_ephemeral,
1836 extensions::ExtensionPrefs::DELAY_REASON_WAIT_FOR_IMPORTS, 1841 extensions::ExtensionPrefs::DELAY_REASON_WAIT_FOR_IMPORTS,
1837 page_ordinal, 1842 page_ordinal,
1838 install_parameter); 1843 install_parameter);
1839 delayed_installs_.Insert(extension); 1844 delayed_installs_.Insert(extension);
1840 } 1845 }
1841 } else { 1846 } else {
1842 AddNewOrUpdatedExtension(extension, 1847 AddNewOrUpdatedExtension(extension,
1843 initial_state, 1848 initial_state,
1844 blacklist_state, 1849 blacklist_state,
1850 is_ephemeral,
1845 page_ordinal, 1851 page_ordinal,
1846 install_parameter); 1852 install_parameter);
1847 } 1853 }
1848 } 1854 }
1849 1855
1850 void ExtensionService::AddNewOrUpdatedExtension( 1856 void ExtensionService::AddNewOrUpdatedExtension(
1851 const Extension* extension, 1857 const Extension* extension,
1852 Extension::State initial_state, 1858 Extension::State initial_state,
1853 extensions::BlacklistState blacklist_state, 1859 extensions::BlacklistState blacklist_state,
1860 bool is_ephemeral,
1854 const syncer::StringOrdinal& page_ordinal, 1861 const syncer::StringOrdinal& page_ordinal,
1855 const std::string& install_parameter) { 1862 const std::string& install_parameter) {
1856 CHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 1863 CHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
1857 const bool blacklisted_for_malware = 1864 const bool blacklisted_for_malware =
1858 blacklist_state == extensions::BLACKLISTED_MALWARE; 1865 blacklist_state == extensions::BLACKLISTED_MALWARE;
1859 extension_prefs_->OnExtensionInstalled(extension, 1866 extension_prefs_->OnExtensionInstalled(extension,
1860 initial_state, 1867 initial_state,
1861 blacklisted_for_malware, 1868 blacklisted_for_malware,
1869 is_ephemeral,
1862 page_ordinal, 1870 page_ordinal,
1863 install_parameter); 1871 install_parameter);
1864 delayed_installs_.Remove(extension->id()); 1872 delayed_installs_.Remove(extension->id());
1865 if (InstallVerifier::NeedsVerification(*extension)) 1873 if (InstallVerifier::NeedsVerification(*extension))
1866 system_->install_verifier()->VerifyExtension(extension->id()); 1874 system_->install_verifier()->VerifyExtension(extension->id());
1867 FinishInstallation(extension); 1875 FinishInstallation(extension);
1868 } 1876 }
1869 1877
1870 void ExtensionService::MaybeFinishDelayedInstallation( 1878 void ExtensionService::MaybeFinishDelayedInstallation(
1871 const std::string& extension_id) { 1879 const std::string& extension_id) {
(...skipping 549 matching lines...) Expand 10 before | Expand all | Expand 10 after
2421 void ExtensionService::UnloadAllExtensionsInternal() { 2429 void ExtensionService::UnloadAllExtensionsInternal() {
2422 profile_->GetExtensionSpecialStoragePolicy()->RevokeRightsForAllExtensions(); 2430 profile_->GetExtensionSpecialStoragePolicy()->RevokeRightsForAllExtensions();
2423 2431
2424 registry_->ClearAll(); 2432 registry_->ClearAll();
2425 system_->runtime_data()->ClearAll(); 2433 system_->runtime_data()->ClearAll();
2426 2434
2427 // TODO(erikkay) should there be a notification for this? We can't use 2435 // TODO(erikkay) should there be a notification for this? We can't use
2428 // EXTENSION_UNLOADED since that implies that the extension has been disabled 2436 // EXTENSION_UNLOADED since that implies that the extension has been disabled
2429 // or uninstalled. 2437 // or uninstalled.
2430 } 2438 }
OLDNEW
« no previous file with comments | « chrome/browser/extensions/extension_service.h ('k') | chrome/browser/extensions/extension_service_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698