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 16namespace 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. 22const AEEventClass kAEChromeAppClass = 'cApp'; 23const 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. 27extern 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. 30extern const char kAppShimSocketSymlinkName[]; 31 32// A symlink used to store the version string of the currently running Chrome. 33// The shim will read this to determine which version of the framework to load. 34extern const char kRunningChromeVersionSymlinkName[]; 35 36// Special app mode id used for the App Launcher. 37extern const char kAppListModeId[]; 38 39// The process ID of the Chrome process that launched the app shim. 40// The presence of this switch instructs the app shim to send LaunchApp with 41// launch_now = false. This associates the shim without launching the app. 42extern const char kLaunchedByChromeProcessId[]; 43 44// Indicates to the shim that it was launched for a test, so don't attempt to 45// launch Chrome. 46extern const char kLaunchedForTest[]; 47 48// Indicates to the shim that this Chrome has rebuilt it once already, i.e. if 49// it fails to launch again, don't trigger another rebuild. 50extern const char kLaunchedAfterRebuild[]; 51 52// Path to an app shim bundle. Indicates to Chrome that this shim attempted to 53// launch but failed. 54extern const char kAppShimError[]; 55 56// Keys for specifying the file types handled by an app. 57extern NSString* const kCFBundleDocumentTypesKey; 58extern NSString* const kCFBundleTypeExtensionsKey; 59extern NSString* const kCFBundleTypeIconFileKey; 60extern NSString* const kCFBundleTypeNameKey; 61extern NSString* const kCFBundleTypeMIMETypesKey; 62extern NSString* const kCFBundleTypeRoleKey; 63extern NSString* const kBundleTypeRoleViewer; 64 65// The display name of the bundle as shown in Finder and the Dock. For localized 66// bundles, this overrides the bundle's file name. 67extern NSString* const kCFBundleDisplayNameKey; 68 69// The Chrome version string in the app shim bundle. 70extern NSString* const kCFBundleShortVersionStringKey; 71 72// The key specifying whether the display name should be localized. This makes 73// Finder look in localization folders in the app bundle for a display name. 74// (e.g. Content/Resources/en.lproj/) 75extern NSString* const kLSHasLocalizedDisplayNameKey; 76 77// The key under which the browser's bundle ID will be stored in the 78// app mode launcher bundle's Info.plist. 79extern NSString* const kBrowserBundleIDKey; 80 81// Key for the shortcut ID. 82extern NSString* const kCrAppModeShortcutIDKey; 83 84// Key for the app's name. 85extern NSString* const kCrAppModeShortcutNameKey; 86 87// Key for the app's URL. 88extern NSString* const kCrAppModeShortcutURLKey; 89 90// Key for the app user data directory. 91extern NSString* const kCrAppModeUserDataDirKey; 92 93// Key for the app's extension path. 94extern NSString* const kCrAppModeProfileDirKey; 95 96// Key for the app's profile display name. 97extern NSString* const kCrAppModeProfileNameKey; 98 99// When the Chrome browser is run, it stores its location in the defaults 100// system using this key. 101extern NSString* const kLastRunAppBundlePathPrefsKey; 102 103// Placeholders used in the app mode loader bundle' Info.plist: 104extern NSString* const kShortcutIdPlaceholder; // Extension shortcut ID. 105extern NSString* const kShortcutNamePlaceholder; // Extension name. 106extern NSString* const kShortcutURLPlaceholder; 107// Bundle ID of the Chrome browser bundle. 108extern NSString* const kShortcutBrowserBundleIDPlaceholder; 109 110// Current major/minor version numbers of |ChromeAppModeInfo| (defined below). 111const unsigned kCurrentChromeAppModeInfoMajorVersion = 1; 112const unsigned kCurrentChromeAppModeInfoMinorVersion = 3; 113 114// The structure used to pass information from the app mode loader to the 115// (browser) framework. This is versioned using major and minor version numbers, 116// written below as v<major>.<minor>. Version-number checking is done by the 117// framework, and the framework must accept all structures with the same major 118// version number. It may refuse to load if the major version of the structure 119// is different from the one it accepts. 120struct ChromeAppModeInfo { 121 public: 122 ChromeAppModeInfo(); 123 ~ChromeAppModeInfo(); 124 125 // Major and minor version number of this structure. 126 unsigned major_version; // Required: all versions 127 unsigned minor_version; // Required: all versions 128 129 // Original |argc| and |argv|. 130 int argc; // Required: v1.0 131 char** argv; // Required: v1.0 132 133 // Versioned path to the browser which is being loaded. 134 base::FilePath chrome_versioned_path; // Required: v1.0 135 136 // Path to Chrome app bundle. 137 base::FilePath chrome_outer_bundle_path; // Required: v1.0 138 139 // Information about the App Mode shortcut: 140 141 // Path to the App Mode Loader application bundle that launched the process. 142 base::FilePath app_mode_bundle_path; // Optional: v1.0 143 144 // Short ID string, preferably derived from |app_mode_short_name|. Should be 145 // safe for the file system. 146 std::string app_mode_id; // Required: v1.0 147 148 // Unrestricted (e.g., several-word) UTF8-encoded name for the shortcut. 149 base::string16 app_mode_name; // Optional: v1.0 150 151 // URL for the shortcut. Must be a valid URL. 152 std::string app_mode_url; // Required: v1.0 153 154 // Path to the app's user data directory. 155 base::FilePath user_data_dir; 156 157 // Directory of the profile associated with the app. 158 base::FilePath profile_dir; 159}; 160 161// Check that the socket and its parent directory have the correct permissions 162// and are owned by the user. 163void VerifySocketPermissions(const base::FilePath& socket_path); 164 165} // namespace app_mode 166 167#endif // CHROME_COMMON_MAC_APP_MODE_COMMON_H_ 168