Home | History | Annotate | Download | only in mac
      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