diff options
author | Xiyuan Xia <xiyuan@chromium.org> | 2015-03-04 19:47:19 -0800 |
---|---|---|
committer | Xiyuan Xia <xiyuan@chromium.org> | 2015-03-05 03:49:02 +0000 |
commit | a4a2c2e6cd74b4438882920d879bd5e99891d38d (patch) | |
tree | d8f79f6f5d0b90baa8d806e973e5b02fc264ee2c | |
parent | 25321827e66b726b7adb66d9fe2b64723550e5c9 (diff) | |
download | chromium_src-a4a2c2e6cd74b4438882920d879bd5e99891d38d.zip chromium_src-a4a2c2e6cd74b4438882920d879bd5e99891d38d.tar.gz chromium_src-a4a2c2e6cd74b4438882920d879bd5e99891d38d.tar.bz2 |
Merge "kiosk: Ensure launching latest version."
> - Add a install_immediately flag to ExternalProviderImpl;
> - Set install_immediately flag to true for kiosk app provider
> so that updated app install is not delayed;
> - Set auto acknowledge since kiosk should not show external
> install alert;
>
> BUG=461419
>
> Review URL: https://codereview.chromium.org/974713002
>
> Cr-Commit-Position: refs/heads/master@{#319005}
> (cherry picked from commit 4d82f7b69b1058e9af2696c568fe051d2b22a213)
TBR=xiyuan@chromium.org
Review URL: https://codereview.chromium.org/983553003
Cr-Commit-Position: refs/branch-heads/2311@{#147}
Cr-Branched-From: 09b7de5dd7254947cd4306de907274fa63373d48-refs/heads/master@{#317474}
9 files changed, 205 insertions, 140 deletions
diff --git a/chrome/browser/chromeos/customization/customization_document_unittest.cc b/chrome/browser/chromeos/customization/customization_document_unittest.cc index f17c803..3e2342b 100644 --- a/chrome/browser/chromeos/customization/customization_document_unittest.cc +++ b/chrome/browser/chromeos/customization/customization_document_unittest.cc @@ -179,12 +179,13 @@ class MockExternalProviderVisitor public: MockExternalProviderVisitor() {} - MOCK_METHOD6(OnExternalExtensionFileFound, + MOCK_METHOD7(OnExternalExtensionFileFound, bool(const std::string&, const base::Version*, const base::FilePath&, extensions::Manifest::Location, int, + bool, bool)); MOCK_METHOD6(OnExternalExtensionUpdateUrlFound, bool(const std::string&, @@ -345,7 +346,7 @@ TEST_F(ServicesCustomizationDocumentTest, NoCustomizationIdInVpd) { extensions::Extension::FROM_WEBSTORE | extensions::Extension::WAS_INSTALLED_BY_DEFAULT)); - EXPECT_CALL(visitor, OnExternalExtensionFileFound(_, _, _, _, _, _)) + EXPECT_CALL(visitor, OnExternalExtensionFileFound(_, _, _, _, _, _, _)) .Times(0); EXPECT_CALL(visitor, OnExternalExtensionUpdateUrlFound(_, _, _, _, _, _)) .Times(0); @@ -390,7 +391,7 @@ TEST_F(ServicesCustomizationDocumentTest, DefaultApps) { extensions::Extension::FROM_WEBSTORE | extensions::Extension::WAS_INSTALLED_BY_DEFAULT)); - EXPECT_CALL(visitor, OnExternalExtensionFileFound(_, _, _, _, _, _)) + EXPECT_CALL(visitor, OnExternalExtensionFileFound(_, _, _, _, _, _, _)) .Times(0); EXPECT_CALL(visitor, OnExternalExtensionUpdateUrlFound(_, _, _, _, _, _)) .Times(0); @@ -401,7 +402,7 @@ TEST_F(ServicesCustomizationDocumentTest, DefaultApps) { loader->StartLoading(); Mock::VerifyAndClearExpectations(&visitor); - EXPECT_CALL(visitor, OnExternalExtensionFileFound(_, _, _, _, _, _)) + EXPECT_CALL(visitor, OnExternalExtensionFileFound(_, _, _, _, _, _, _)) .Times(0); EXPECT_CALL(visitor, OnExternalExtensionUpdateUrlFound(_, _, _, _, _, _)) .Times(2); @@ -440,7 +441,7 @@ TEST_F(ServicesCustomizationDocumentTest, CustomizationManifestNotFound) { extensions::Extension::FROM_WEBSTORE | extensions::Extension::WAS_INSTALLED_BY_DEFAULT)); - EXPECT_CALL(visitor, OnExternalExtensionFileFound(_, _, _, _, _, _)) + EXPECT_CALL(visitor, OnExternalExtensionFileFound(_, _, _, _, _, _, _)) .Times(0); EXPECT_CALL(visitor, OnExternalExtensionUpdateUrlFound(_, _, _, _, _, _)) .Times(0); @@ -451,7 +452,7 @@ TEST_F(ServicesCustomizationDocumentTest, CustomizationManifestNotFound) { loader->StartLoading(); Mock::VerifyAndClearExpectations(&visitor); - EXPECT_CALL(visitor, OnExternalExtensionFileFound(_, _, _, _, _, _)) + EXPECT_CALL(visitor, OnExternalExtensionFileFound(_, _, _, _, _, _, _)) .Times(0); EXPECT_CALL(visitor, OnExternalExtensionUpdateUrlFound(_, _, _, _, _, _)) .Times(0); diff --git a/chrome/browser/chromeos/extensions/device_local_account_external_policy_loader_unittest.cc b/chrome/browser/chromeos/extensions/device_local_account_external_policy_loader_unittest.cc index e987661..33cfb83 100644 --- a/chrome/browser/chromeos/extensions/device_local_account_external_policy_loader_unittest.cc +++ b/chrome/browser/chromeos/extensions/device_local_account_external_policy_loader_unittest.cc @@ -63,12 +63,13 @@ class MockExternalPolicyProviderVisitor MockExternalPolicyProviderVisitor(); virtual ~MockExternalPolicyProviderVisitor(); - MOCK_METHOD6(OnExternalExtensionFileFound, + MOCK_METHOD7(OnExternalExtensionFileFound, bool(const std::string&, const base::Version*, const base::FilePath&, extensions::Manifest::Location, int, + bool, bool)); MOCK_METHOD6(OnExternalExtensionUpdateUrlFound, bool(const std::string&, @@ -155,7 +156,7 @@ void DeviceLocalAccountExternalPolicyLoaderTest::TearDown() { void DeviceLocalAccountExternalPolicyLoaderTest:: VerifyAndResetVisitorCallExpectations() { Mock::VerifyAndClearExpectations(&visitor_); - EXPECT_CALL(visitor_, OnExternalExtensionFileFound(_, _, _, _, _, _)) + EXPECT_CALL(visitor_, OnExternalExtensionFileFound(_, _, _, _, _, _, _)) .Times(0); EXPECT_CALL(visitor_, OnExternalExtensionUpdateUrlFound(_, _, _, _, _, _)) .Times(0); @@ -280,6 +281,7 @@ TEST_F(DeviceLocalAccountExternalPolicyLoaderTest, ForceInstallListSet) { cached_crx_path, extensions::Manifest::EXTERNAL_POLICY, _, + _, _)); EXPECT_CALL(visitor_, OnExternalProviderReady(provider_.get())) .Times(1) diff --git a/chrome/browser/extensions/extension_service.cc b/chrome/browser/extensions/extension_service.cc index ef2d572..2f5044a 100644 --- a/chrome/browser/extensions/extension_service.cc +++ b/chrome/browser/extensions/extension_service.cc @@ -2099,7 +2099,8 @@ bool ExtensionService::OnExternalExtensionFileFound( const base::FilePath& path, Manifest::Location location, int creation_flags, - bool mark_acknowledged) { + bool mark_acknowledged, + bool install_immediately) { CHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); CHECK(crx_file::id_util::IdIsValid(id)); if (extension_prefs_->IsExternalExtensionUninstalled(id)) @@ -2150,6 +2151,7 @@ bool ExtensionService::OnExternalExtensionFileFound( installer->set_expected_id(id); installer->set_expected_version(*version); installer->set_install_cause(extension_misc::INSTALL_CAUSE_EXTERNAL_FILE); + installer->set_install_immediately(install_immediately); installer->set_creation_flags(creation_flags); #if defined(OS_CHROMEOS) extensions::InstallLimiter::Get(profile_)->Add(installer, path); diff --git a/chrome/browser/extensions/extension_service.h b/chrome/browser/extensions/extension_service.h index 4b6005d..fe127df 100644 --- a/chrome/browser/extensions/extension_service.h +++ b/chrome/browser/extensions/extension_service.h @@ -232,7 +232,8 @@ class ExtensionService const base::FilePath& path, extensions::Manifest::Location location, int creation_flags, - bool mark_acknowledged) override; + bool mark_acknowledged, + bool install_immediately) override; bool OnExternalExtensionUpdateUrlFound( const std::string& id, const std::string& install_parameter, diff --git a/chrome/browser/extensions/extension_service_unittest.cc b/chrome/browser/extensions/extension_service_unittest.cc index 0e9e757..3b0a8b3 100644 --- a/chrome/browser/extensions/extension_service_unittest.cc +++ b/chrome/browser/extensions/extension_service_unittest.cc @@ -270,7 +270,7 @@ class MockExtensionProvider : public extensions::ExternalProviderInterface { visitor_->OnExternalExtensionFileFound( i->first, &version, i->second.second, location_, - Extension::NO_FLAGS, false); + Extension::NO_FLAGS, false, false); } visitor_->OnExternalProviderReady(this); } @@ -377,7 +377,8 @@ class MockProviderVisitor const base::FilePath& path, Manifest::Location unused, int creation_flags, - bool mark_acknowledged) override { + bool mark_acknowledged, + bool install_immediately) override { EXPECT_EQ(expected_creation_flags_, creation_flags); ++ids_found_; @@ -1564,12 +1565,14 @@ TEST_F(ExtensionServiceTest, InstallingExternalExtensionWithFlags) { content::WindowedNotificationObserver observer( extensions::NOTIFICATION_CRX_INSTALLER_DONE, content::NotificationService::AllSources()); - if (service()->OnExternalExtensionFileFound(good_crx, - &version, - path, - Manifest::EXTERNAL_PREF, - Extension::FROM_BOOKMARK, - false /* mark_acknowledged */)) { + if (service()->OnExternalExtensionFileFound( + good_crx, + &version, + path, + Manifest::EXTERNAL_PREF, + Extension::FROM_BOOKMARK, + false /* mark_acknowledged */, + false /* install_immediately */)) { observer.Wait(); } @@ -1604,6 +1607,7 @@ TEST_F(ExtensionServiceTest, UninstallingExternalExtensions) { path, Manifest::EXTERNAL_PREF, Extension::NO_FLAGS, + false, false)) { observer.Wait(); } @@ -1621,6 +1625,7 @@ TEST_F(ExtensionServiceTest, UninstallingExternalExtensions) { path, Manifest::EXTERNAL_PREF, Extension::NO_FLAGS, + false, false); base::RunLoop().RunUntilIdle(); ASSERT_TRUE(NULL == service()->GetExtensionById(good_crx, false)); @@ -1635,6 +1640,7 @@ TEST_F(ExtensionServiceTest, UninstallingExternalExtensions) { path, Manifest::EXTERNAL_PREF, Extension::NO_FLAGS, + false, false); base::RunLoop().RunUntilIdle(); ASSERT_TRUE(NULL == service()->GetExtensionById(good_crx, false)); @@ -1702,6 +1708,7 @@ TEST_F(ExtensionServiceTest, FailOnWrongId) { path, Manifest::EXTERNAL_PREF, Extension::NO_FLAGS, + false, false); observer.Wait(); @@ -1716,6 +1723,7 @@ TEST_F(ExtensionServiceTest, FailOnWrongId) { path, Manifest::EXTERNAL_PREF, Extension::NO_FLAGS, + false, false)) { observer2.Wait(); } @@ -1739,6 +1747,7 @@ TEST_F(ExtensionServiceTest, FailOnWrongVersion) { path, Manifest::EXTERNAL_PREF, Extension::NO_FLAGS, + false, false); observer.Wait(); @@ -1755,6 +1764,7 @@ TEST_F(ExtensionServiceTest, FailOnWrongVersion) { path, Manifest::EXTERNAL_PREF, Extension::NO_FLAGS, + false, false)) { observer2.Wait(); } @@ -6825,6 +6835,7 @@ TEST_F(ExtensionServiceTest, InstallPriorityExternalLocalFile) { const int kCreationFlags = 0; const bool kDontMarkAcknowledged = false; + const bool kDontInstallImmediately = false; InitializeEmptyExtensionService(); @@ -6852,12 +6863,14 @@ TEST_F(ExtensionServiceTest, InstallPriorityExternalLocalFile) { content::WindowedNotificationObserver observer( extensions::NOTIFICATION_CRX_INSTALLER_DONE, content::NotificationService::AllSources()); - EXPECT_TRUE(service()->OnExternalExtensionFileFound(kGoodId, - &older_version, - kInvalidPathToCrx, - Manifest::INTERNAL, - kCreationFlags, - kDontMarkAcknowledged)); + EXPECT_TRUE(service()->OnExternalExtensionFileFound( + kGoodId, + &older_version, + kInvalidPathToCrx, + Manifest::INTERNAL, + kCreationFlags, + kDontMarkAcknowledged, + kDontInstallImmediately)); EXPECT_TRUE(pending->IsIdPending(kGoodId)); observer.Wait(); VerifyCrxInstall(kInvalidPathToCrx, INSTALL_FAILED); @@ -6868,12 +6881,14 @@ TEST_F(ExtensionServiceTest, InstallPriorityExternalLocalFile) { content::WindowedNotificationObserver observer( extensions::NOTIFICATION_CRX_INSTALLER_DONE, content::NotificationService::AllSources()); - EXPECT_TRUE(service()->OnExternalExtensionFileFound(kGoodId, - &older_version, - kInvalidPathToCrx, - Manifest::EXTERNAL_PREF, - kCreationFlags, - kDontMarkAcknowledged)); + EXPECT_TRUE(service()->OnExternalExtensionFileFound( + kGoodId, + &older_version, + kInvalidPathToCrx, + Manifest::EXTERNAL_PREF, + kCreationFlags, + kDontMarkAcknowledged, + kDontInstallImmediately)); EXPECT_TRUE(pending->IsIdPending(kGoodId)); observer.Wait(); VerifyCrxInstall(kInvalidPathToCrx, INSTALL_FAILED); @@ -6882,21 +6897,25 @@ TEST_F(ExtensionServiceTest, InstallPriorityExternalLocalFile) { // Simulate an external source adding as EXTERNAL_PREF again. // This is rejected because the version and the location are the same as // the previous installation, which is still pending. - EXPECT_FALSE(service()->OnExternalExtensionFileFound(kGoodId, - &older_version, - kInvalidPathToCrx, - Manifest::EXTERNAL_PREF, - kCreationFlags, - kDontMarkAcknowledged)); + EXPECT_FALSE(service()->OnExternalExtensionFileFound( + kGoodId, + &older_version, + kInvalidPathToCrx, + Manifest::EXTERNAL_PREF, + kCreationFlags, + kDontMarkAcknowledged, + kDontInstallImmediately)); EXPECT_TRUE(pending->IsIdPending(kGoodId)); // Try INTERNAL again. Should fail. - EXPECT_FALSE(service()->OnExternalExtensionFileFound(kGoodId, - &older_version, - kInvalidPathToCrx, - Manifest::INTERNAL, - kCreationFlags, - kDontMarkAcknowledged)); + EXPECT_FALSE(service()->OnExternalExtensionFileFound( + kGoodId, + &older_version, + kInvalidPathToCrx, + Manifest::INTERNAL, + kCreationFlags, + kDontMarkAcknowledged, + kDontInstallImmediately)); EXPECT_TRUE(pending->IsIdPending(kGoodId)); { @@ -6904,33 +6923,38 @@ TEST_F(ExtensionServiceTest, InstallPriorityExternalLocalFile) { content::WindowedNotificationObserver observer( extensions::NOTIFICATION_CRX_INSTALLER_DONE, content::NotificationService::AllSources()); - EXPECT_TRUE( - service()->OnExternalExtensionFileFound(kGoodId, - &older_version, - kInvalidPathToCrx, - Manifest::EXTERNAL_REGISTRY, - kCreationFlags, - kDontMarkAcknowledged)); + EXPECT_TRUE(service()->OnExternalExtensionFileFound( + kGoodId, + &older_version, + kInvalidPathToCrx, + Manifest::EXTERNAL_REGISTRY, + kCreationFlags, + kDontMarkAcknowledged, + kDontInstallImmediately)); EXPECT_TRUE(pending->IsIdPending(kGoodId)); observer.Wait(); VerifyCrxInstall(kInvalidPathToCrx, INSTALL_FAILED); } // Registry outranks both external pref and internal, so both fail. - EXPECT_FALSE(service()->OnExternalExtensionFileFound(kGoodId, - &older_version, - kInvalidPathToCrx, - Manifest::EXTERNAL_PREF, - kCreationFlags, - kDontMarkAcknowledged)); + EXPECT_FALSE(service()->OnExternalExtensionFileFound( + kGoodId, + &older_version, + kInvalidPathToCrx, + Manifest::EXTERNAL_PREF, + kCreationFlags, + kDontMarkAcknowledged, + kDontInstallImmediately)); EXPECT_TRUE(pending->IsIdPending(kGoodId)); - EXPECT_FALSE(service()->OnExternalExtensionFileFound(kGoodId, - &older_version, - kInvalidPathToCrx, - Manifest::INTERNAL, - kCreationFlags, - kDontMarkAcknowledged)); + EXPECT_FALSE(service()->OnExternalExtensionFileFound( + kGoodId, + &older_version, + kInvalidPathToCrx, + Manifest::INTERNAL, + kCreationFlags, + kDontMarkAcknowledged, + kDontInstallImmediately)); EXPECT_TRUE(pending->IsIdPending(kGoodId)); pending->Remove(kGoodId); @@ -6954,70 +6978,83 @@ TEST_F(ExtensionServiceTest, InstallPriorityExternalLocalFile) { // older, or the same, and succeed if the version is newer. // Older than the installed version... - EXPECT_FALSE(service()->OnExternalExtensionFileFound(kGoodId, - &older_version, - kInvalidPathToCrx, - Manifest::INTERNAL, - kCreationFlags, - kDontMarkAcknowledged)); + EXPECT_FALSE(service()->OnExternalExtensionFileFound( + kGoodId, + &older_version, + kInvalidPathToCrx, + Manifest::INTERNAL, + kCreationFlags, + kDontMarkAcknowledged, + kDontInstallImmediately)); EXPECT_FALSE(pending->IsIdPending(kGoodId)); // Same version as the installed version... - EXPECT_FALSE(service()->OnExternalExtensionFileFound(kGoodId, - ext->version(), - kInvalidPathToCrx, - Manifest::INTERNAL, - kCreationFlags, - kDontMarkAcknowledged)); + EXPECT_FALSE(service()->OnExternalExtensionFileFound( + kGoodId, + ext->version(), + kInvalidPathToCrx, + Manifest::INTERNAL, + kCreationFlags, + kDontMarkAcknowledged, + kDontInstallImmediately)); EXPECT_FALSE(pending->IsIdPending(kGoodId)); // Newer than the installed version... - EXPECT_TRUE(service()->OnExternalExtensionFileFound(kGoodId, - &newer_version, - kInvalidPathToCrx, - Manifest::INTERNAL, - kCreationFlags, - kDontMarkAcknowledged)); + EXPECT_TRUE(service()->OnExternalExtensionFileFound( + kGoodId, + &newer_version, + kInvalidPathToCrx, + Manifest::INTERNAL, + kCreationFlags, + kDontMarkAcknowledged, + kDontInstallImmediately)); EXPECT_TRUE(pending->IsIdPending(kGoodId)); // An external install for a higher priority install source should succeed // if the version is greater. |older_version| is not... - EXPECT_FALSE(service()->OnExternalExtensionFileFound(kGoodId, - &older_version, - kInvalidPathToCrx, - Manifest::EXTERNAL_PREF, - kCreationFlags, - kDontMarkAcknowledged)); + EXPECT_FALSE(service()->OnExternalExtensionFileFound( + kGoodId, + &older_version, + kInvalidPathToCrx, + Manifest::EXTERNAL_PREF, + kCreationFlags, + kDontMarkAcknowledged, + kDontInstallImmediately)); EXPECT_TRUE(pending->IsIdPending(kGoodId)); // |newer_version| is newer. - EXPECT_TRUE(service()->OnExternalExtensionFileFound(kGoodId, - &newer_version, - kInvalidPathToCrx, - Manifest::EXTERNAL_PREF, - kCreationFlags, - kDontMarkAcknowledged)); + EXPECT_TRUE(service()->OnExternalExtensionFileFound( + kGoodId, + &newer_version, + kInvalidPathToCrx, + Manifest::EXTERNAL_PREF, + kCreationFlags, + kDontMarkAcknowledged, + kDontInstallImmediately)); EXPECT_TRUE(pending->IsIdPending(kGoodId)); // An external install for an even higher priority install source should // succeed if the version is greater. - EXPECT_TRUE( - service()->OnExternalExtensionFileFound(kGoodId, - &newer_version, - kInvalidPathToCrx, - Manifest::EXTERNAL_REGISTRY, - kCreationFlags, - kDontMarkAcknowledged)); + EXPECT_TRUE(service()->OnExternalExtensionFileFound( + kGoodId, + &newer_version, + kInvalidPathToCrx, + Manifest::EXTERNAL_REGISTRY, + kCreationFlags, + kDontMarkAcknowledged, + kDontInstallImmediately)); EXPECT_TRUE(pending->IsIdPending(kGoodId)); // Because EXTERNAL_PREF is a lower priority source than EXTERNAL_REGISTRY, // adding from external pref will now fail. - EXPECT_FALSE(service()->OnExternalExtensionFileFound(kGoodId, - &newer_version, - kInvalidPathToCrx, - Manifest::EXTERNAL_PREF, - kCreationFlags, - kDontMarkAcknowledged)); + EXPECT_FALSE(service()->OnExternalExtensionFileFound( + kGoodId, + &newer_version, + kInvalidPathToCrx, + Manifest::EXTERNAL_PREF, + kCreationFlags, + kDontMarkAcknowledged, + kDontInstallImmediately)); EXPECT_TRUE(pending->IsIdPending(kGoodId)); } @@ -7028,6 +7065,7 @@ TEST_F(ExtensionServiceTest, ConcurrentExternalLocalFile) { const base::FilePath kInvalidPathToCrx(FILE_PATH_LITERAL("invalid_path")); const int kCreationFlags = 0; const bool kDontMarkAcknowledged = false; + const bool kDontInstallImmediately = false; InitializeEmptyExtensionService(); @@ -7036,48 +7074,55 @@ TEST_F(ExtensionServiceTest, ConcurrentExternalLocalFile) { EXPECT_FALSE(pending->IsIdPending(kGoodId)); // An external provider starts installing from a local crx. - EXPECT_TRUE(service()->OnExternalExtensionFileFound(kGoodId, - &kVersion123, - kInvalidPathToCrx, - Manifest::EXTERNAL_PREF, - kCreationFlags, - kDontMarkAcknowledged)); + EXPECT_TRUE(service()->OnExternalExtensionFileFound( + kGoodId, + &kVersion123, + kInvalidPathToCrx, + Manifest::EXTERNAL_PREF, + kCreationFlags, + kDontMarkAcknowledged, + kDontInstallImmediately)); const extensions::PendingExtensionInfo* info; EXPECT_TRUE((info = pending->GetById(kGoodId))); EXPECT_TRUE(info->version().IsValid()); EXPECT_TRUE(info->version().Equals(kVersion123)); // Adding a newer version overrides the currently pending version. - EXPECT_TRUE(service()->OnExternalExtensionFileFound(kGoodId, - &kVersion124, - kInvalidPathToCrx, - Manifest::EXTERNAL_PREF, - kCreationFlags, - kDontMarkAcknowledged)); + EXPECT_TRUE(service()->OnExternalExtensionFileFound( + kGoodId, + &kVersion124, + kInvalidPathToCrx, + Manifest::EXTERNAL_PREF, + kCreationFlags, + kDontMarkAcknowledged, + kDontInstallImmediately)); EXPECT_TRUE((info = pending->GetById(kGoodId))); EXPECT_TRUE(info->version().IsValid()); EXPECT_TRUE(info->version().Equals(kVersion124)); // Adding an older version fails. - EXPECT_FALSE(service()->OnExternalExtensionFileFound(kGoodId, - &kVersion123, - kInvalidPathToCrx, - Manifest::EXTERNAL_PREF, - kCreationFlags, - kDontMarkAcknowledged)); + EXPECT_FALSE(service()->OnExternalExtensionFileFound( + kGoodId, + &kVersion123, + kInvalidPathToCrx, + Manifest::EXTERNAL_PREF, + kCreationFlags, + kDontMarkAcknowledged, + kDontInstallImmediately)); EXPECT_TRUE((info = pending->GetById(kGoodId))); EXPECT_TRUE(info->version().IsValid()); EXPECT_TRUE(info->version().Equals(kVersion124)); // Adding an older version fails even when coming from a higher-priority // location. - EXPECT_FALSE( - service()->OnExternalExtensionFileFound(kGoodId, - &kVersion123, - kInvalidPathToCrx, - Manifest::EXTERNAL_REGISTRY, - kCreationFlags, - kDontMarkAcknowledged)); + EXPECT_FALSE(service()->OnExternalExtensionFileFound( + kGoodId, + &kVersion123, + kInvalidPathToCrx, + Manifest::EXTERNAL_REGISTRY, + kCreationFlags, + kDontMarkAcknowledged, + kDontInstallImmediately)); EXPECT_TRUE((info = pending->GetById(kGoodId))); EXPECT_TRUE(info->version().IsValid()); EXPECT_TRUE(info->version().Equals(kVersion124)); @@ -7150,6 +7195,7 @@ class ExtensionSourcePriorityTest : public ExtensionServiceTest { crx_path_, Manifest::EXTERNAL_PREF, Extension::NO_FLAGS, + false, false); } diff --git a/chrome/browser/extensions/external_policy_loader_unittest.cc b/chrome/browser/extensions/external_policy_loader_unittest.cc index 571c3cb..11e7448 100644 --- a/chrome/browser/extensions/external_policy_loader_unittest.cc +++ b/chrome/browser/extensions/external_policy_loader_unittest.cc @@ -74,7 +74,8 @@ class MockExternalPolicyProviderVisitor const base::FilePath& path, Manifest::Location unused, int unused2, - bool unused3) override { + bool unused3, + bool unused4) override { ADD_FAILURE() << "There should be no external extensions from files."; return false; } diff --git a/chrome/browser/extensions/external_provider_impl.cc b/chrome/browser/extensions/external_provider_impl.cc index 9966755..98dfc63 100644 --- a/chrome/browser/extensions/external_provider_impl.cc +++ b/chrome/browser/extensions/external_provider_impl.cc @@ -80,7 +80,8 @@ ExternalProviderImpl::ExternalProviderImpl( loader_(loader), profile_(profile), creation_flags_(creation_flags), - auto_acknowledge_(false) { + auto_acknowledge_(false), + install_immediately_(false) { loader_->Init(this); } @@ -271,7 +272,8 @@ void ExternalProviderImpl::SetPrefs(base::DictionaryValue* prefs) { } service_->OnExternalExtensionFileFound(extension_id, &version, path, crx_location_, creation_flags, - auto_acknowledge_); + auto_acknowledge_, + install_immediately_); } else { // if (has_external_update_url) CHECK(has_external_update_url); // Checking of keys above ensures this. if (download_location_ == Manifest::INVALID_LOCATION) { @@ -423,13 +425,15 @@ void ExternalProviderImpl::CreateExternalProviders( chromeos::KioskAppManager::Get(); DCHECK(kiosk_app_manager); if (kiosk_app_manager && !kiosk_app_manager->external_loader_created()) { - provider_list->push_back(linked_ptr<ExternalProviderInterface>( - new ExternalProviderImpl(service, - kiosk_app_manager->CreateExternalLoader(), - profile, - Manifest::EXTERNAL_PREF, - Manifest::INVALID_LOCATION, - Extension::NO_FLAGS))); + scoped_ptr<ExternalProviderImpl> kiosk_app_provider( + new ExternalProviderImpl( + service, kiosk_app_manager->CreateExternalLoader(), profile, + Manifest::EXTERNAL_PREF, Manifest::INVALID_LOCATION, + Extension::NO_FLAGS)); + kiosk_app_provider->set_auto_acknowledge(true); + kiosk_app_provider->set_install_immediately(true); + provider_list->push_back( + linked_ptr<ExternalProviderInterface>(kiosk_app_provider.release())); } #endif return; diff --git a/chrome/browser/extensions/external_provider_impl.h b/chrome/browser/extensions/external_provider_impl.h index 0ba5e51..6217fb7 100644 --- a/chrome/browser/extensions/external_provider_impl.h +++ b/chrome/browser/extensions/external_provider_impl.h @@ -78,6 +78,10 @@ class ExternalProviderImpl : public ExternalProviderInterface { auto_acknowledge_ = auto_acknowledge; } + void set_install_immediately(bool install_immediately) { + install_immediately_ = install_immediately; + } + private: // Location for external extensions that are provided by this provider from // local crx files. @@ -113,6 +117,9 @@ class ExternalProviderImpl : public ExternalProviderInterface { // the user doesn't see an alert about them. bool auto_acknowledge_; + // Whether the extensions from this provider should be installed immediately. + bool install_immediately_; + DISALLOW_COPY_AND_ASSIGN(ExternalProviderImpl); }; diff --git a/extensions/browser/external_provider_interface.h b/extensions/browser/external_provider_interface.h index d14fc7c..801f4ed 100644 --- a/extensions/browser/external_provider_interface.h +++ b/extensions/browser/external_provider_interface.h @@ -40,7 +40,8 @@ class ExternalProviderInterface { const base::FilePath& path, Manifest::Location location, int creation_flags, - bool mark_acknowledged) = 0; + bool mark_acknowledged, + bool install_immediately) = 0; // Return true if the extension install will proceed. Install might not // proceed if the extension is already installed from a higher priority |