summaryrefslogtreecommitdiffstats
path: root/chrome/browser/extensions
diff options
context:
space:
mode:
authortengs@chromium.org <tengs@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-09-26 08:42:30 +0000
committertengs@chromium.org <tengs@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-09-26 08:42:30 +0000
commit14a18bf29f50bccceb3be7ba9aefb7b9ce5834c3 (patch)
treed40092078c383546966826641e24c4af5409991d /chrome/browser/extensions
parentdec3e9395662225cc8535562f55b401bcda4d26d (diff)
downloadchromium_src-14a18bf29f50bccceb3be7ba9aefb7b9ce5834c3.zip
chromium_src-14a18bf29f50bccceb3be7ba9aefb7b9ce5834c3.tar.gz
chromium_src-14a18bf29f50bccceb3be7ba9aefb7b9ce5834c3.tar.bz2
Add "kiosk_only" manifest attribute for platform apps.
This top-level manifest attribute enforces that the app can only be installed and run in ChromeOS kiosk mode. BUG=284964 TEST=added new tests Review URL: https://codereview.chromium.org/23604068 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@225400 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/extensions')
-rw-r--r--chrome/browser/extensions/api/system_display/system_display_api.cc4
-rw-r--r--chrome/browser/extensions/crx_installer.cc18
-rw-r--r--chrome/browser/extensions/crx_installer_browsertest.cc21
3 files changed, 41 insertions, 2 deletions
diff --git a/chrome/browser/extensions/api/system_display/system_display_api.cc b/chrome/browser/extensions/api/system_display/system_display_api.cc
index 36dd2f2..775a429 100644
--- a/chrome/browser/extensions/api/system_display/system_display_api.cc
+++ b/chrome/browser/extensions/api/system_display/system_display_api.cc
@@ -5,7 +5,7 @@
#include "chrome/browser/extensions/api/system_display/system_display_api.h"
#include "base/memory/scoped_ptr.h"
-#include "chrome/common/extensions/manifest_handlers/kiosk_enabled_info.h"
+#include "chrome/common/extensions/manifest_handlers/kiosk_mode_info.h"
namespace extensions {
@@ -37,7 +37,7 @@ bool SystemDisplaySetDisplayPropertiesFunction::RunImpl() {
SetError("Function available only on ChromeOS.");
return false;
#else
- if (!KioskEnabledInfo::IsKioskEnabled(GetExtension())) {
+ if (!KioskModeInfo::IsKioskEnabled(GetExtension())) {
SetError("The extension needs to be kiosk enabled to use the function.");
return false;
}
diff --git a/chrome/browser/extensions/crx_installer.cc b/chrome/browser/extensions/crx_installer.cc
index 2f793a2..2205608 100644
--- a/chrome/browser/extensions/crx_installer.cc
+++ b/chrome/browser/extensions/crx_installer.cc
@@ -38,6 +38,7 @@
#include "chrome/common/extensions/extension_file_util.h"
#include "chrome/common/extensions/extension_icon_set.h"
#include "chrome/common/extensions/feature_switch.h"
+#include "chrome/common/extensions/manifest_handlers/kiosk_mode_info.h"
#include "chrome/common/extensions/manifest_handlers/shared_module_info.h"
#include "chrome/common/extensions/manifest_url_handler.h"
#include "chrome/common/extensions/permissions/permission_set.h"
@@ -55,6 +56,10 @@
#include "ui/base/l10n/l10n_util.h"
#include "ui/base/resource/resource_bundle.h"
+#if defined(OS_CHROMEOS)
+#include "chrome/browser/chromeos/login/user_manager.h"
+#endif
+
using content::BrowserThread;
using content::UserMetricsAction;
using extensions::SharedModuleInfo;
@@ -512,6 +517,19 @@ void CrxInstaller::ConfirmInstall() {
if (!service || service->browser_terminating())
return;
+ if (KioskModeInfo::IsKioskOnly(installer_.extension())) {
+ bool in_kiosk_mode = false;
+#if defined(OS_CHROMEOS)
+ chromeos::UserManager* user_manager = chromeos::UserManager::Get();
+ in_kiosk_mode = user_manager && user_manager->IsLoggedInAsKioskApp();
+#endif
+ if (!in_kiosk_mode) {
+ ReportFailureFromUIThread(CrxInstallerError(
+ l10n_util::GetStringUTF16(
+ IDS_EXTENSION_INSTALL_KIOSK_MODE_ONLY)));
+ }
+ }
+
string16 error = installer_.CheckManagementPolicy();
if (!error.empty()) {
// We don't want to show the error infobar for installs from the WebStore,
diff --git a/chrome/browser/extensions/crx_installer_browsertest.cc b/chrome/browser/extensions/crx_installer_browsertest.cc
index 105b4c6..a916842 100644
--- a/chrome/browser/extensions/crx_installer_browsertest.cc
+++ b/chrome/browser/extensions/crx_installer_browsertest.cc
@@ -25,6 +25,11 @@
#include "grit/generated_resources.h"
#include "ui/base/l10n/l10n_util.h"
+#if defined(OS_CHROMEOS)
+#include "chrome/browser/chromeos/login/fake_user_manager.h"
+#include "chrome/browser/chromeos/login/user_manager.h"
+#endif
+
class SkBitmap;
namespace extensions {
@@ -477,4 +482,20 @@ IN_PROC_BROWSER_TEST_F(ExtensionCrxInstallerTest, NonStrictManifestCheck) {
EXPECT_TRUE(mock_prompt->did_succeed());
}
+IN_PROC_BROWSER_TEST_F(ExtensionCrxInstallerTest, KioskOnlyTest) {
+ base::FilePath crx_path =
+ test_data_dir_.AppendASCII("kiosk/kiosk_only.crx");
+ EXPECT_FALSE(InstallExtension(crx_path, 0));
+#if defined(OS_CHROMEOS)
+ // Simulate ChromeOS kiosk mode. |scoped_user_manager| will take over
+ // lifetime of |user_manager|.
+ chromeos::FakeUserManager* fake_user_manager =
+ new chromeos::FakeUserManager();
+ fake_user_manager->AddKioskAppUser("example@example.com");
+ fake_user_manager->LoginUser("example@example.com");
+ chromeos::ScopedUserManagerEnabler scoped_user_manager(fake_user_manager);
+ EXPECT_TRUE(InstallExtension(crx_path, 1));
+#endif
+}
+
} // namespace extensions