This source file includes following definitions.
- RegisterProfilePrefs
- GetLaunchType
- GetLaunchTypePrefValue
- SetLaunchType
- GetLaunchContainer
- HasPreferredLaunchContainer
#include "chrome/browser/extensions/launch_util.h"
#include "base/command_line.h"
#include "base/values.h"
#include "chrome/browser/extensions/extension_service.h"
#include "chrome/browser/profiles/profile.h"
#include "chrome/browser/ui/host_desktop.h"
#include "chrome/common/chrome_switches.h"
#include "chrome/common/extensions/extension_constants.h"
#include "chrome/common/extensions/manifest_handlers/app_launch_info.h"
#include "components/user_prefs/pref_registry_syncable.h"
#include "extensions/browser/extension_prefs.h"
#include "extensions/browser/pref_names.h"
#include "extensions/common/extension.h"
#if defined(OS_WIN)
#include "win8/util/win8_util.h"
#endif
#if defined(USE_ASH)
#include "ash/shell.h"
#endif
namespace extensions {
namespace {
const char kPrefLaunchType[] = "launchType";
}
namespace launch_util {
void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry) {
registry->RegisterIntegerPref(
pref_names::kBookmarkAppCreationLaunchType,
LAUNCH_TYPE_WINDOW,
user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF);
}
}
LaunchType GetLaunchType(const ExtensionPrefs* prefs,
const Extension* extension) {
LaunchType result = LAUNCH_TYPE_DEFAULT;
if (CommandLine::ForCurrentProcess()->
HasSwitch(switches::kEnableStreamlinedHostedApps) &&
extension->id() != extension_misc::kChromeAppId) {
result = LAUNCH_TYPE_WINDOW;
}
int value = GetLaunchTypePrefValue(prefs, extension->id());
if (value >= LAUNCH_TYPE_FIRST && value < NUM_LAUNCH_TYPES)
result = static_cast<LaunchType>(value);
#if defined(OS_MACOSX)
if (!extension->is_platform_app() && result == LAUNCH_TYPE_WINDOW)
result = LAUNCH_TYPE_REGULAR;
#endif
#if defined(OS_WIN)
if (win8::IsSingleWindowMetroMode() && result == LAUNCH_TYPE_WINDOW)
result = LAUNCH_TYPE_REGULAR;
#endif
return result;
}
LaunchType GetLaunchTypePrefValue(const ExtensionPrefs* prefs,
const std::string& extension_id) {
int value = LAUNCH_TYPE_INVALID;
return prefs->ReadPrefAsInteger(extension_id, kPrefLaunchType, &value)
? static_cast<LaunchType>(value) : LAUNCH_TYPE_INVALID;
}
void SetLaunchType(ExtensionService* service,
const std::string& extension_id,
LaunchType launch_type) {
DCHECK(launch_type >= LAUNCH_TYPE_FIRST && launch_type < NUM_LAUNCH_TYPES);
ExtensionPrefs::Get(service->profile())->UpdateExtensionPref(
extension_id,
kPrefLaunchType,
new base::FundamentalValue(static_cast<int>(launch_type)));
const Extension* extension = service->GetInstalledExtension(extension_id);
if (extension) {
ExtensionSyncService::Get(service->profile())->
SyncExtensionChangeIfNeeded(*extension);
}
}
LaunchContainer GetLaunchContainer(const ExtensionPrefs* prefs,
const Extension* extension) {
LaunchContainer manifest_launch_container =
AppLaunchInfo::GetLaunchContainer(extension);
const LaunchContainer kInvalidLaunchContainer =
static_cast<LaunchContainer>(-1);
LaunchContainer result = kInvalidLaunchContainer;
if (manifest_launch_container == LAUNCH_CONTAINER_PANEL) {
result = manifest_launch_container;
} else if (manifest_launch_container == LAUNCH_CONTAINER_TAB) {
LaunchType prefs_launch_type = GetLaunchType(prefs, extension);
if (prefs_launch_type == LAUNCH_TYPE_WINDOW) {
result = LAUNCH_CONTAINER_WINDOW;
#if defined(USE_ASH)
} else if (prefs_launch_type == LAUNCH_TYPE_FULLSCREEN &&
chrome::GetActiveDesktop() == chrome::HOST_DESKTOP_TYPE_ASH) {
result = LAUNCH_CONTAINER_WINDOW;
#endif
} else {
result = LAUNCH_CONTAINER_TAB;
}
} else {
NOTREACHED() << manifest_launch_container;
}
if (result == kInvalidLaunchContainer) {
DLOG(FATAL) << "Failed to set a launch container.";
result = LAUNCH_CONTAINER_TAB;
}
return result;
}
bool HasPreferredLaunchContainer(const ExtensionPrefs* prefs,
const Extension* extension) {
int value = -1;
LaunchContainer manifest_launch_container =
AppLaunchInfo::GetLaunchContainer(extension);
return manifest_launch_container == LAUNCH_CONTAINER_TAB &&
prefs->ReadPrefAsInteger(extension->id(), kPrefLaunchType, &value);
}
}