1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #ifndef CHROME_COMMON_MAC_APP_MODE_COMMON_H_ 6 #define CHROME_COMMON_MAC_APP_MODE_COMMON_H_ 7 8 #import <Foundation/Foundation.h> 9 10 #include "base/files/file_path.h" 11 #include "base/strings/string16.h" 12 13 // This file contains constants, interfaces, etc. which are common to the 14 // browser application and the app mode loader (a.k.a. shim). 15 16 namespace app_mode { 17 18 // These are keys for an Apple Event ping that the app shim process sends to 19 // Chrome to get confirmation that Chrome is alive. The main Chrome process 20 // doesn't need to register any handlers for them -- the event is just sent for 21 // the empty reply that's automatically returned by the system. 22 const AEEventClass kAEChromeAppClass = 'cApp'; 23 const AEEventID kAEChromeAppPing = 'ping'; 24 25 // The IPC socket used to communicate between app shims and Chrome will be 26 // created under a temporary directory with this name. 27 extern const char kAppShimSocketShortName[]; 28 // A symlink to allow the app shim to find the socket will be created under the 29 // user data dir with this name. 30 extern const char kAppShimSocketSymlinkName[]; 31 32 // Special app mode id used for the App Launcher. 33 extern const char kAppListModeId[]; 34 35 // The process ID of the Chrome process that launched the app shim. 36 // The presence of this switch instructs the app shim to send LaunchApp with 37 // launch_now = false. This associates the shim without launching the app. 38 extern const char kLaunchedByChromeProcessId[]; 39 40 // Indicates to the shim that it was launched for a test, so don't attempt to 41 // launch Chrome. 42 extern const char kLaunchedForTest[]; 43 44 // Indicates to the shim that this Chrome has rebuilt it once already, i.e. if 45 // it fails to launch again, don't trigger another rebuild. 46 extern const char kLaunchedAfterRebuild[]; 47 48 // Path to an app shim bundle. Indicates to Chrome that this shim attempted to 49 // launch but failed. 50 extern const char kAppShimError[]; 51 52 // Keys for specifying the file types handled by an app. 53 extern NSString* const kCFBundleDocumentTypesKey; 54 extern NSString* const kCFBundleTypeExtensionsKey; 55 extern NSString* const kCFBundleTypeIconFileKey; 56 extern NSString* const kCFBundleTypeNameKey; 57 extern NSString* const kCFBundleTypeMIMETypesKey; 58 extern NSString* const kCFBundleTypeRoleKey; 59 extern NSString* const kBundleTypeRoleViewer; 60 61 // The display name of the bundle as shown in Finder and the Dock. For localized 62 // bundles, this overrides the bundle's file name. 63 extern NSString* const kCFBundleDisplayNameKey; 64 65 // The key specifying whether the display name should be localized. This makes 66 // Finder look in localization folders in the app bundle for a display name. 67 // (e.g. Content/Resources/en.lproj/) 68 extern NSString* const kLSHasLocalizedDisplayNameKey; 69 70 // The key under which the browser's bundle ID will be stored in the 71 // app mode launcher bundle's Info.plist. 72 extern NSString* const kBrowserBundleIDKey; 73 74 // Key for the shortcut ID. 75 extern NSString* const kCrAppModeShortcutIDKey; 76 77 // Key for the app's name. 78 extern NSString* const kCrAppModeShortcutNameKey; 79 80 // Key for the app's URL. 81 extern NSString* const kCrAppModeShortcutURLKey; 82 83 // Key for the app user data directory. 84 extern NSString* const kCrAppModeUserDataDirKey; 85 86 // Key for the app's extension path. 87 extern NSString* const kCrAppModeProfileDirKey; 88 89 // Key for the app's profile display name. 90 extern NSString* const kCrAppModeProfileNameKey; 91 92 // When the Chrome browser is run, it stores its location in the defaults 93 // system using this key. 94 extern NSString* const kLastRunAppBundlePathPrefsKey; 95 96 // Placeholders used in the app mode loader bundle' Info.plist: 97 extern NSString* const kShortcutIdPlaceholder; // Extension shortcut ID. 98 extern NSString* const kShortcutNamePlaceholder; // Extension name. 99 extern NSString* const kShortcutURLPlaceholder; 100 // Bundle ID of the Chrome browser bundle. 101 extern NSString* const kShortcutBrowserBundleIDPlaceholder; 102 103 // Current major/minor version numbers of |ChromeAppModeInfo| (defined below). 104 const unsigned kCurrentChromeAppModeInfoMajorVersion = 1; 105 const unsigned kCurrentChromeAppModeInfoMinorVersion = 2; 106 107 // The structure used to pass information from the app mode loader to the 108 // (browser) framework. This is versioned using major and minor version numbers, 109 // written below as v<major>.<minor>. Version-number checking is done by the 110 // framework, and the framework must accept all structures with the same major 111 // version number. It may refuse to load if the major version of the structure 112 // is different from the one it accepts. 113 struct ChromeAppModeInfo { 114 public: 115 ChromeAppModeInfo(); 116 ~ChromeAppModeInfo(); 117 118 // Major and minor version number of this structure. 119 unsigned major_version; // Required: all versions 120 unsigned minor_version; // Required: all versions 121 122 // Original |argc| and |argv|. 123 int argc; // Required: v1.0 124 char** argv; // Required: v1.0 125 126 // Versioned path to the browser which is being loaded. 127 base::FilePath chrome_versioned_path; // Required: v1.0 128 129 // Path to Chrome app bundle. 130 base::FilePath chrome_outer_bundle_path; // Required: v1.0 131 132 // Information about the App Mode shortcut: 133 134 // Path to the App Mode Loader application bundle that launched the process. 135 base::FilePath app_mode_bundle_path; // Optional: v1.0 136 137 // Short ID string, preferably derived from |app_mode_short_name|. Should be 138 // safe for the file system. 139 std::string app_mode_id; // Required: v1.0 140 141 // Unrestricted (e.g., several-word) UTF8-encoded name for the shortcut. 142 base::string16 app_mode_name; // Optional: v1.0 143 144 // URL for the shortcut. Must be a valid URL. 145 std::string app_mode_url; // Required: v1.0 146 147 // Path to the app's user data directory. 148 base::FilePath user_data_dir; 149 150 // Directory of the profile associated with the app. 151 base::FilePath profile_dir; 152 }; 153 154 // Check that the socket and its parent directory have the correct permissions 155 // and are owned by the user. 156 void VerifySocketPermissions(const base::FilePath& socket_path); 157 158 } // namespace app_mode 159 160 #endif // CHROME_COMMON_MAC_APP_MODE_COMMON_H_ 161