#include "base/sequenced_task_runner.h"
#include "base/sys_info.h"
#include "chrome/browser/browser_process.h"
-#include "chrome/browser/chromeos/login/users/user_manager.h"
+#include "chrome/browser/chromeos/profiles/profile_helper.h"
#include "chrome/browser/extensions/extension_service.h"
#include "chrome/browser/profiles/profile.h"
+#include "chrome/common/extensions/extension_constants.h"
+#include "chrome/common/extensions/manifest_url_handler.h"
#include "chromeos/chromeos_switches.h"
+#include "components/user_manager/user_manager.h"
#include "content/public/browser/browser_thread.h"
#include "extensions/browser/extension_prefs.h"
#include "extensions/browser/extension_system.h"
const base::FilePath& local_install_dir,
Profile* profile,
InstallExtensionCallback callback) {
- if (!CanShareAssets(extension)) {
+ if (!CanShareAssets(extension, unpacked_extension_root)) {
InstallLocalExtension(extension->id(),
extension->VersionString(),
unpacked_extension_root,
}
// static
+bool ExtensionAssetsManagerChromeOS::IsSharedInstall(
+ const Extension* extension) {
+ return GetSharedInstallDir().IsParent(extension->path());
+}
+
+// static
bool ExtensionAssetsManagerChromeOS::CleanUpSharedExtensions(
std::multimap<std::string, base::FilePath>* live_extension_paths) {
DCHECK_CURRENTLY_ON(BrowserThread::UI);
// static
bool ExtensionAssetsManagerChromeOS::CanShareAssets(
- const Extension* extension) {
+ const Extension* extension,
+ const base::FilePath& unpacked_extension_root) {
if (!CommandLine::ForCurrentProcess()->HasSwitch(
chromeos::switches::kEnableExtensionAssetsSharing)) {
return false;
}
+ GURL update_url = ManifestURL::GetUpdateURL(extension);
+ if (!update_url.is_empty() &&
+ !extension_urls::IsWebstoreUpdateUrl(update_url)) {
+ return false;
+ }
+
// Chrome caches crx files for installed by default apps so sharing assets is
// also possible. User specific apps should be excluded to not expose apps
// unique for the user outside of user's cryptohome.
DCHECK_CURRENTLY_ON(BrowserThread::UI);
const std::string& user_id = profile->GetProfileName();
- chromeos::UserManager* user_manager = chromeos::UserManager::Get();
+ user_manager::UserManager* user_manager = user_manager::UserManager::Get();
if (!user_manager) {
NOTREACHED();
return;
const std::string& id,
base::DictionaryValue* extension_info,
std::multimap<std::string, base::FilePath>* live_extension_paths) {
- chromeos::UserManager* user_manager = chromeos::UserManager::Get();
+ user_manager::UserManager* user_manager = user_manager::UserManager::Get();
if (!user_manager) {
NOTREACHED();
return false;
NOTREACHED();
return false;
}
- const chromeos::User* user = user_manager->FindUser(user_id);
+ const user_manager::User* user = user_manager->FindUser(user_id);
bool not_used = false;
if (!user) {
not_used = true;
} else if (user->is_logged_in()) {
// For logged in user also check that this path is actually used as
// installed extension or as delayed install.
- Profile* profile = user_manager->GetProfileByUser(user);
+ Profile* profile =
+ chromeos::ProfileHelper::Get()->GetProfileByUserUnsafe(user);
ExtensionPrefs* extension_prefs = ExtensionPrefs::Get(profile);
if (!extension_prefs || extension_prefs->pref_service()->ReadOnly())
return false;