// Copyright (c) 2012 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. #ifndef CHROME_COMMON_MAC_APP_MODE_COMMON_H_ #define CHROME_COMMON_MAC_APP_MODE_COMMON_H_ #import <Foundation/Foundation.h> #include "base/files/file_path.h" #include "base/strings/string16.h" // This file contains constants, interfaces, etc. which are common to the // browser application and the app mode loader (a.k.a. shim). namespace app_mode { // These are keys for an Apple Event ping that the app shim process sends to // Chrome to get confirmation that Chrome is alive. The main Chrome process // doesn't need to register any handlers for them -- the event is just sent for // the empty reply that's automatically returned by the system. const AEEventClass kAEChromeAppClass = 'cApp'; const AEEventID kAEChromeAppPing = 'ping'; // The IPC socket used to communicate between app shims and Chrome will be // created under a temporary directory with this name. extern const char kAppShimSocketShortName[]; // A symlink to allow the app shim to find the socket will be created under the // user data dir with this name. extern const char kAppShimSocketSymlinkName[]; // Special app mode id used for the App Launcher. extern const char kAppListModeId[]; // The process ID of the Chrome process that launched the app shim. // The presence of this switch instructs the app shim to send LaunchApp with // launch_now = false. This associates the shim without launching the app. extern const char kLaunchedByChromeProcessId[]; // Indicates to the shim that it was launched for a test, so don't attempt to // launch Chrome. extern const char kLaunchedForTest[]; // Indicates to the shim that this Chrome has rebuilt it once already, i.e. if // it fails to launch again, don't trigger another rebuild. extern const char kLaunchedAfterRebuild[]; // Path to an app shim bundle. Indicates to Chrome that this shim attempted to // launch but failed. extern const char kAppShimError[]; // Keys for specifying the file types handled by an app. extern NSString* const kCFBundleDocumentTypesKey; extern NSString* const kCFBundleTypeExtensionsKey; extern NSString* const kCFBundleTypeIconFileKey; extern NSString* const kCFBundleTypeNameKey; extern NSString* const kCFBundleTypeMIMETypesKey; extern NSString* const kCFBundleTypeRoleKey; extern NSString* const kBundleTypeRoleViewer; // The display name of the bundle as shown in Finder and the Dock. For localized // bundles, this overrides the bundle's file name. extern NSString* const kCFBundleDisplayNameKey; // The key specifying whether the display name should be localized. This makes // Finder look in localization folders in the app bundle for a display name. // (e.g. Content/Resources/en.lproj/) extern NSString* const kLSHasLocalizedDisplayNameKey; // The key under which the browser's bundle ID will be stored in the // app mode launcher bundle's Info.plist. extern NSString* const kBrowserBundleIDKey; // Key for the shortcut ID. extern NSString* const kCrAppModeShortcutIDKey; // Key for the app's name. extern NSString* const kCrAppModeShortcutNameKey; // Key for the app's URL. extern NSString* const kCrAppModeShortcutURLKey; // Key for the app user data directory. extern NSString* const kCrAppModeUserDataDirKey; // Key for the app's extension path. extern NSString* const kCrAppModeProfileDirKey; // Key for the app's profile display name. extern NSString* const kCrAppModeProfileNameKey; // When the Chrome browser is run, it stores its location in the defaults // system using this key. extern NSString* const kLastRunAppBundlePathPrefsKey; // Placeholders used in the app mode loader bundle' Info.plist: extern NSString* const kShortcutIdPlaceholder; // Extension shortcut ID. extern NSString* const kShortcutNamePlaceholder; // Extension name. extern NSString* const kShortcutURLPlaceholder; // Bundle ID of the Chrome browser bundle. extern NSString* const kShortcutBrowserBundleIDPlaceholder; // Current major/minor version numbers of |ChromeAppModeInfo| (defined below). const unsigned kCurrentChromeAppModeInfoMajorVersion = 1; const unsigned kCurrentChromeAppModeInfoMinorVersion = 2; // The structure used to pass information from the app mode loader to the // (browser) framework. This is versioned using major and minor version numbers, // written below as v<major>.<minor>. Version-number checking is done by the // framework, and the framework must accept all structures with the same major // version number. It may refuse to load if the major version of the structure // is different from the one it accepts. struct ChromeAppModeInfo { public: ChromeAppModeInfo(); ~ChromeAppModeInfo(); // Major and minor version number of this structure. unsigned major_version; // Required: all versions unsigned minor_version; // Required: all versions // Original |argc| and |argv|. int argc; // Required: v1.0 char** argv; // Required: v1.0 // Versioned path to the browser which is being loaded. base::FilePath chrome_versioned_path; // Required: v1.0 // Path to Chrome app bundle. base::FilePath chrome_outer_bundle_path; // Required: v1.0 // Information about the App Mode shortcut: // Path to the App Mode Loader application bundle that launched the process. base::FilePath app_mode_bundle_path; // Optional: v1.0 // Short ID string, preferably derived from |app_mode_short_name|. Should be // safe for the file system. std::string app_mode_id; // Required: v1.0 // Unrestricted (e.g., several-word) UTF8-encoded name for the shortcut. base::string16 app_mode_name; // Optional: v1.0 // URL for the shortcut. Must be a valid URL. std::string app_mode_url; // Required: v1.0 // Path to the app's user data directory. base::FilePath user_data_dir; // Directory of the profile associated with the app. base::FilePath profile_dir; }; // Check that the socket and its parent directory have the correct permissions // and are owned by the user. void VerifySocketPermissions(const base::FilePath& socket_path); } // namespace app_mode #endif // CHROME_COMMON_MAC_APP_MODE_COMMON_H_