Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2587)

Unified Diff: chrome/browser/extensions/launch_util.cc

Issue 105733003: Move LaunchType out of ExtensionPrefs. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: add missing extension.h include for windows Created 7 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/extensions/launch_util.cc
diff --git a/chrome/browser/extensions/launch_util.cc b/chrome/browser/extensions/launch_util.cc
new file mode 100644
index 0000000000000000000000000000000000000000..aaef29cabd89c1c917ca61ce8a85248a94abbf39
--- /dev/null
+++ b/chrome/browser/extensions/launch_util.cc
@@ -0,0 +1,136 @@
+// Copyright (c) 2013 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "chrome/browser/extensions/launch_util.h"
+
+#include "base/command_line.h"
+#include "base/values.h"
+#include "chrome/browser/extensions/extension_prefs.h"
+#include "chrome/browser/ui/host_desktop.h"
+#include "chrome/common/chrome_switches.h"
+#include "chrome/common/extensions/manifest_handlers/app_launch_info.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 {
+
+// A preference set by the the NTP to persist the desired launch container type
+// used for apps.
+const char kPrefLaunchType[] = "launchType";
+
+} // namespace
+
+LaunchType GetLaunchType(const ExtensionPrefs* prefs,
+ const Extension* extension) {
+ int value = -1;
+ LaunchType result = LAUNCH_TYPE_DEFAULT;
+
+ // Launch hosted apps as windows by default for streamlined hosted apps.
+ if (CommandLine::ForCurrentProcess()->
+ HasSwitch(switches::kEnableStreamlinedHostedApps)) {
+ result = LAUNCH_TYPE_WINDOW;
+ }
+
+ if (prefs->ReadPrefAsInteger(extension->id(), kPrefLaunchType, &value) &&
+ (value == LAUNCH_TYPE_PINNED ||
+ value == LAUNCH_TYPE_REGULAR ||
+ value == LAUNCH_TYPE_FULLSCREEN ||
+ value == LAUNCH_TYPE_WINDOW)) {
+ result = static_cast<LaunchType>(value);
+ }
+#if defined(OS_MACOSX)
+ // App windows are not yet supported on mac. Pref sync could make
+ // the launch type LAUNCH_TYPE_WINDOW, even if there is no UI to set it
+ // on mac.
+ if (!extension->is_platform_app() && result == LAUNCH_TYPE_WINDOW)
+ result = LAUNCH_TYPE_REGULAR;
+#endif
+
+#if defined(OS_WIN)
+ // We don't support app windows in Windows 8 single window Metro mode.
+ if (win8::IsSingleWindowMetroMode() && result == LAUNCH_TYPE_WINDOW)
+ result = LAUNCH_TYPE_REGULAR;
+#endif // OS_WIN
+
+ return result;
+}
+
+void SetLaunchType(ExtensionPrefs* prefs,
+ const std::string& extension_id,
+ LaunchType launch_type) {
+ prefs->UpdateExtensionPref(extension_id, kPrefLaunchType,
+ new base::FundamentalValue(static_cast<int>(launch_type)));
+}
+
+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_PANEL) {
+ // Apps with app.launch.container = 'panel' should always respect the
+ // manifest setting.
+ result = manifest_launch_container;
+ } else if (manifest_launch_container == LAUNCH_TAB) {
+ // Look for prefs that indicate the user's choice of launch container. The
+ // app's menu on the NTP provides a UI to set this preference.
+ LaunchType prefs_launch_type = GetLaunchType(prefs, extension);
+
+ if (prefs_launch_type == LAUNCH_TYPE_WINDOW) {
+ // If the pref is set to launch a window (or no pref is set, and
+ // window opening is the default), make the container a window.
+ result = LAUNCH_WINDOW;
+#if defined(USE_ASH)
+ } else if (prefs_launch_type == LAUNCH_TYPE_FULLSCREEN &&
+ chrome::GetActiveDesktop() == chrome::HOST_DESKTOP_TYPE_ASH) {
+ // LAUNCH_TYPE_FULLSCREEN launches in a maximized app window in ash.
+ // For desktop chrome AURA on all platforms we should open the
+ // application in full screen mode in the current tab, on the same
+ // lines as non AURA chrome.
+ result = LAUNCH_WINDOW;
+#endif
+ } else {
+ // All other launch types (tab, pinned, fullscreen) are
+ // implemented as tabs in a window.
+ result = LAUNCH_TAB;
+ }
+ } else {
+ // If a new value for app.launch.container is added, logic for it should be
+ // added here. LAUNCH_WINDOW is not present because there is no way to set
+ // it in a manifest.
+ NOTREACHED() << manifest_launch_container;
+ }
+
+ // All paths should set |result|.
+ if (result == kInvalidLaunchContainer) {
+ DLOG(FATAL) << "Failed to set a launch container.";
+ result = LAUNCH_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_TAB &&
+ prefs->ReadPrefAsInteger(extension->id(), kPrefLaunchType, &value);
+}
+
+} // namespace extensions

Powered by Google App Engine
This is Rietveld 408576698