summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorXiyuan Xia <xiyuan@chromium.org>2015-03-04 19:47:19 -0800
committerXiyuan Xia <xiyuan@chromium.org>2015-03-05 03:49:02 +0000
commita4a2c2e6cd74b4438882920d879bd5e99891d38d (patch)
treed8f79f6f5d0b90baa8d806e973e5b02fc264ee2c
parent25321827e66b726b7adb66d9fe2b64723550e5c9 (diff)
downloadchromium_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}
-rw-r--r--chrome/browser/chromeos/customization/customization_document_unittest.cc13
-rw-r--r--chrome/browser/chromeos/extensions/device_local_account_external_policy_loader_unittest.cc6
-rw-r--r--chrome/browser/extensions/extension_service.cc4
-rw-r--r--chrome/browser/extensions/extension_service.h3
-rw-r--r--chrome/browser/extensions/extension_service_unittest.cc284
-rw-r--r--chrome/browser/extensions/external_policy_loader_unittest.cc3
-rw-r--r--chrome/browser/extensions/external_provider_impl.cc22
-rw-r--r--chrome/browser/extensions/external_provider_impl.h7
-rw-r--r--extensions/browser/external_provider_interface.h3
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