diff options
Diffstat (limited to 'remoting')
18 files changed, 2882 insertions, 0 deletions
diff --git a/remoting/host/installer/mac/Chrome Remote Desktop.packproj b/remoting/host/installer/mac/Chrome Remote Desktop.packproj new file mode 100644 index 0000000..ff0dc91 --- /dev/null +++ b/remoting/host/installer/mac/Chrome Remote Desktop.packproj @@ -0,0 +1,778 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> +<plist version="1.0"> +<dict> + <key>Hierarchy</key> + <dict> + <key>Attributes</key> + <dict> + <key>Components</key> + <array> + <dict> + <key>Attributes</key> + <dict> + <key>Documents</key> + <dict> + <key>Background Image</key> + <dict> + <key>IFPkgFlagBackgroundAlignment</key> + <integer>4</integer> + <key>IFPkgFlagBackgroundScaling</key> + <integer>1</integer> + <key>Mode</key> + <integer>0</integer> + <key>Path</key> + <string></string> + <key>Path Type</key> + <integer>1</integer> + </dict> + <key>License</key> + <dict> + <key>International</key> + <dict> + <key>Mode</key> + <integer>0</integer> + <key>Path</key> + <string></string> + <key>Path Type</key> + <integer>1</integer> + </dict> + </dict> + <key>ReadMe</key> + <dict> + <key>International</key> + <dict> + <key>Mode</key> + <integer>0</integer> + <key>Path</key> + <string></string> + <key>Path Type</key> + <integer>1</integer> + </dict> + </dict> + <key>Welcome</key> + <dict> + <key>International</key> + <dict> + <key>Mode</key> + <integer>0</integer> + <key>Path</key> + <string></string> + <key>Path Type</key> + <integer>1</integer> + </dict> + </dict> + </dict> + <key>Files</key> + <dict> + <key>Hierarchy</key> + <dict/> + <key>IFPkgFlagDefaultLocation</key> + <string>/</string> + <key>Imported Options</key> + <dict> + <key>IFPkgFlagInstalledSize</key> + <integer>4</integer> + </dict> + <key>Imported Package</key> + <true/> + <key>Package Path</key> + <string>Keystone/GoogleSoftwareUpdate.pkg</string> + <key>Package Path Type</key> + <integer>2</integer> + </dict> + <key>Plugins</key> + <dict> + <key>PluginsList</key> + <array> + <dict> + <key>Path</key> + <string>Introduction</string> + <key>Type</key> + <integer>0</integer> + </dict> + <dict> + <key>Path</key> + <string>ReadMe</string> + <key>Type</key> + <integer>0</integer> + </dict> + <dict> + <key>Path</key> + <string>License</string> + <key>Type</key> + <integer>0</integer> + </dict> + <dict> + <key>Path</key> + <string>Target</string> + <key>Type</key> + <integer>0</integer> + </dict> + <dict> + <key>Path</key> + <string>PackageSelection</string> + <key>Type</key> + <integer>0</integer> + </dict> + <dict> + <key>Path</key> + <string>Install</string> + <key>Type</key> + <integer>0</integer> + </dict> + <dict> + <key>Path</key> + <string>FinishUp</string> + <key>Type</key> + <integer>0</integer> + </dict> + </array> + </dict> + <key>Scripts</key> + <dict> + <key>Additional Resources</key> + <dict> + <key>English</key> + <array> + <dict> + <key>Path</key> + <string>Keystone/GoogleSoftwareUpdate.pkg/Contents/Resources/English.lproj/InstallationCheck.strings</string> + <key>Path Type</key> + <integer>2</integer> + <key>Status</key> + <true/> + </dict> + </array> + <key>International</key> + <array> + <dict> + <key>Path</key> + <string>Keystone/GoogleSoftwareUpdate.pkg/Contents/Resources/IFRequirement.strings</string> + <key>Path Type</key> + <integer>2</integer> + <key>Status</key> + <true/> + </dict> + <dict> + <key>Path</key> + <string>Keystone/GoogleSoftwareUpdate.pkg/Contents/Resources/install.py</string> + <key>Path Type</key> + <integer>2</integer> + <key>Status</key> + <true/> + </dict> + <dict> + <key>Path</key> + <string>Keystone/GoogleSoftwareUpdate.pkg/Contents/Resources/InstallationCheck</string> + <key>Path Type</key> + <integer>2</integer> + <key>Status</key> + <true/> + </dict> + <dict> + <key>Path</key> + <string>Keystone/GoogleSoftwareUpdate.pkg/Contents/Resources/Keystone.tbz</string> + <key>Path Type</key> + <integer>2</integer> + <key>Status</key> + <true/> + </dict> + </array> + </dict> + <key>Installation Scripts</key> + <dict> + <key>IFInstallationScriptsPostflight</key> + <dict> + <key>Path</key> + <string>Keystone/GoogleSoftwareUpdate.pkg/Contents/Resources/postflight</string> + <key>Path Type</key> + <integer>2</integer> + <key>Status</key> + <true/> + </dict> + <key>IFInstallationScriptsPostinstall</key> + <dict> + <key>Path</key> + <string></string> + <key>Status</key> + <false/> + </dict> + <key>IFInstallationScriptsPostupgrade</key> + <dict> + <key>Path</key> + <string></string> + <key>Status</key> + <false/> + </dict> + <key>IFInstallationScriptsPreflight</key> + <dict> + <key>Path</key> + <string>Keystone/GoogleSoftwareUpdate.pkg/Contents/Resources/preflight</string> + <key>Path Type</key> + <integer>2</integer> + <key>Status</key> + <true/> + </dict> + <key>IFInstallationScriptsPreinstall</key> + <dict> + <key>Path</key> + <string></string> + <key>Status</key> + <false/> + </dict> + <key>IFInstallationScriptsPreupgrade</key> + <dict> + <key>Path</key> + <string></string> + <key>Status</key> + <false/> + </dict> + </dict> + <key>Requirements</key> + <array/> + </dict> + <key>Settings</key> + <dict> + <key>Description</key> + <dict> + <key>International</key> + <dict> + <key>IFPkgDescriptionDeleteWarning</key> + <string></string> + <key>IFPkgDescriptionDescription</key> + <string></string> + <key>IFPkgDescriptionTitle</key> + <string>Google Software Update</string> + <key>IFPkgDescriptionVersion</key> + <string>Google Software Update 1.0.9.2865, © 2005-2010 Google Inc.</string> + </dict> + </dict> + <key>Display Information</key> + <dict> + <key>CFBundleGetInfoString</key> + <string>Google Software Update 1.0.9.2865, © 2005-2010 Google Inc.</string> + <key>CFBundleIconFile</key> + <string></string> + <key>CFBundleIconFile Path Type</key> + <integer>1</integer> + <key>CFBundleIdentifier</key> + <string>com.google.pkg.Keystone</string> + <key>CFBundleName</key> + <string>GoogleSoftwareUpdate</string> + <key>CFBundleShortVersionString</key> + <string>1.0.9</string> + </dict> + <key>Options</key> + <dict> + <key>IFPkgFlagAllowBackRev</key> + <true/> + <key>IFPkgFlagAuthorizationAction</key> + <integer>2</integer> + <key>IFPkgFlagFollowLinks</key> + <false/> + <key>IFPkgFlagIsRequired</key> + <false/> + <key>IFPkgFlagOverwritePermissions</key> + <false/> + <key>IFPkgFlagRelocatable</key> + <false/> + <key>IFPkgFlagRestartAction</key> + <integer>0</integer> + <key>IFPkgFlagRootVolumeOnly</key> + <true/> + <key>IFPkgFlagUpdateInstalledLanguages</key> + <false/> + </dict> + <key>Version</key> + <dict> + <key>IFMajorVersion</key> + <integer>1</integer> + <key>IFMinorVersion</key> + <integer>0</integer> + </dict> + </dict> + </dict> + <key>IFPkgFlagPackageSelection</key> + <integer>1</integer> + <key>Name</key> + <string>GoogleSoftwareUpdate</string> + <key>Status</key> + <integer>1</integer> + <key>Type</key> + <integer>1</integer> + </dict> + <dict> + <key>Attributes</key> + <dict> + <key>Documents</key> + <dict> + <key>Background Image</key> + <dict> + <key>IFPkgFlagBackgroundAlignment</key> + <integer>4</integer> + <key>IFPkgFlagBackgroundScaling</key> + <integer>1</integer> + <key>Mode</key> + <integer>0</integer> + <key>Path</key> + <string></string> + <key>Path Type</key> + <integer>1</integer> + </dict> + <key>License</key> + <dict> + <key>International</key> + <dict> + <key>Mode</key> + <integer>0</integer> + <key>Path</key> + <string></string> + <key>Path Type</key> + <integer>1</integer> + </dict> + </dict> + <key>ReadMe</key> + <dict> + <key>International</key> + <dict> + <key>Mode</key> + <integer>0</integer> + <key>Path</key> + <string></string> + <key>Path Type</key> + <integer>1</integer> + </dict> + </dict> + <key>Welcome</key> + <dict> + <key>International</key> + <dict> + <key>Mode</key> + <integer>0</integer> + <key>Path</key> + <string></string> + <key>Path Type</key> + <integer>1</integer> + </dict> + </dict> + </dict> + <key>Files</key> + <dict> + <key>Hierarchy</key> + <dict/> + <key>IFPkgFlagDefaultLocation</key> + <string>/</string> + <key>Imported Options</key> + <dict> + <key>IFPkgFlagInstalledSize</key> + <integer>19572</integer> + </dict> + <key>Imported Package</key> + <true/> + <key>Package Path</key> + <string>build/Chromoting.pkg</string> + <key>Package Path Type</key> + <integer>2</integer> + </dict> + <key>Plugins</key> + <dict> + <key>PluginsList</key> + <array> + <dict> + <key>Path</key> + <string>Introduction</string> + <key>Type</key> + <integer>0</integer> + </dict> + <dict> + <key>Path</key> + <string>ReadMe</string> + <key>Type</key> + <integer>0</integer> + </dict> + <dict> + <key>Path</key> + <string>License</string> + <key>Type</key> + <integer>0</integer> + </dict> + <dict> + <key>Path</key> + <string>Target</string> + <key>Type</key> + <integer>0</integer> + </dict> + <dict> + <key>Path</key> + <string>PackageSelection</string> + <key>Type</key> + <integer>0</integer> + </dict> + <dict> + <key>Path</key> + <string>Install</string> + <key>Type</key> + <integer>0</integer> + </dict> + <dict> + <key>Path</key> + <string>FinishUp</string> + <key>Type</key> + <integer>0</integer> + </dict> + </array> + </dict> + <key>Scripts</key> + <dict> + <key>Additional Resources</key> + <dict> + <key>International</key> + <array/> + </dict> + <key>Installation Scripts</key> + <dict> + <key>IFInstallationScriptsPostflight</key> + <dict> + <key>Path</key> + <string>build/Chromoting.pkg/Contents/Resources/postflight</string> + <key>Path Type</key> + <integer>2</integer> + <key>Status</key> + <true/> + </dict> + <key>IFInstallationScriptsPostinstall</key> + <dict> + <key>Path</key> + <string></string> + <key>Status</key> + <false/> + </dict> + <key>IFInstallationScriptsPostupgrade</key> + <dict> + <key>Path</key> + <string></string> + <key>Status</key> + <false/> + </dict> + <key>IFInstallationScriptsPreflight</key> + <dict> + <key>Path</key> + <string></string> + <key>Status</key> + <false/> + </dict> + <key>IFInstallationScriptsPreinstall</key> + <dict> + <key>Path</key> + <string></string> + <key>Status</key> + <false/> + </dict> + <key>IFInstallationScriptsPreupgrade</key> + <dict> + <key>Path</key> + <string></string> + <key>Status</key> + <false/> + </dict> + </dict> + <key>Requirements</key> + <array/> + </dict> + <key>Settings</key> + <dict> + <key>Description</key> + <dict> + <key>International</key> + <dict> + <key>IFPkgDescriptionDeleteWarning</key> + <string></string> + <key>IFPkgDescriptionDescription</key> + <string></string> + <key>IFPkgDescriptionTitle</key> + <string>Chromoting</string> + <key>IFPkgDescriptionVersion</key> + <string>0.2</string> + </dict> + </dict> + <key>Display Information</key> + <dict> + <key>CFBundleGetInfoString</key> + <string>Chromoting 0.2 Copyright © 2012 The Chromium Authors.</string> + <key>CFBundleIconFile</key> + <string></string> + <key>CFBundleIconFile Path Type</key> + <integer>1</integer> + <key>CFBundleIdentifier</key> + <string>org.chromium.pkg.Chromoting</string> + <key>CFBundleName</key> + <string>Chromoting</string> + <key>CFBundleShortVersionString</key> + <string>0.2</string> + </dict> + <key>Options</key> + <dict> + <key>IFPkgFlagAllowBackRev</key> + <false/> + <key>IFPkgFlagAuthorizationAction</key> + <integer>1</integer> + <key>IFPkgFlagFollowLinks</key> + <false/> + <key>IFPkgFlagIsRequired</key> + <false/> + <key>IFPkgFlagOverwritePermissions</key> + <false/> + <key>IFPkgFlagRelocatable</key> + <false/> + <key>IFPkgFlagRestartAction</key> + <integer>0</integer> + <key>IFPkgFlagRootVolumeOnly</key> + <true/> + <key>IFPkgFlagUpdateInstalledLanguages</key> + <false/> + </dict> + <key>Version</key> + <dict> + <key>IFMajorVersion</key> + <integer>0</integer> + <key>IFMinorVersion</key> + <integer>2</integer> + </dict> + </dict> + </dict> + <key>IFPkgFlagPackageSelection</key> + <integer>1</integer> + <key>Name</key> + <string>Chromoting</string> + <key>Status</key> + <integer>1</integer> + <key>Type</key> + <integer>1</integer> + </dict> + </array> + <key>Documents</key> + <dict> + <key>Background Image</key> + <dict> + <key>IFPkgFlagBackgroundAlignment</key> + <integer>4</integer> + <key>IFPkgFlagBackgroundScaling</key> + <integer>1</integer> + <key>Mode</key> + <integer>0</integer> + <key>Path</key> + <string></string> + <key>Path Type</key> + <integer>1</integer> + </dict> + <key>License</key> + <dict> + <key>International</key> + <dict> + <key>Mode</key> + <integer>0</integer> + <key>Path</key> + <string></string> + <key>Path Type</key> + <integer>1</integer> + </dict> + </dict> + <key>ReadMe</key> + <dict> + <key>International</key> + <dict> + <key>Mode</key> + <integer>0</integer> + <key>Path</key> + <string></string> + <key>Path Type</key> + <integer>1</integer> + </dict> + </dict> + <key>Welcome</key> + <dict> + <key>International</key> + <dict> + <key>Mode</key> + <integer>0</integer> + <key>Path</key> + <string></string> + <key>Path Type</key> + <integer>1</integer> + </dict> + </dict> + </dict> + <key>Plugins</key> + <dict> + <key>PluginsList</key> + <array> + <dict> + <key>Path</key> + <string>Introduction</string> + <key>Type</key> + <integer>0</integer> + </dict> + <dict> + <key>Path</key> + <string>ReadMe</string> + <key>Type</key> + <integer>0</integer> + </dict> + <dict> + <key>Path</key> + <string>License</string> + <key>Type</key> + <integer>0</integer> + </dict> + <dict> + <key>Path</key> + <string>Target</string> + <key>Type</key> + <integer>0</integer> + </dict> + <dict> + <key>Path</key> + <string>PackageSelection</string> + <key>Type</key> + <integer>0</integer> + </dict> + <dict> + <key>Path</key> + <string>Install</string> + <key>Type</key> + <integer>0</integer> + </dict> + <dict> + <key>Path</key> + <string>FinishUp</string> + <key>Type</key> + <integer>0</integer> + </dict> + </array> + </dict> + <key>Scripts</key> + <dict> + <key>Additional Resources</key> + <dict> + <key>International</key> + <array/> + </dict> + <key>Installation Scripts</key> + <dict> + <key>IFInstallationScriptsPostflight</key> + <dict> + <key>Path</key> + <string></string> + <key>Status</key> + <false/> + </dict> + <key>IFInstallationScriptsPostinstall</key> + <dict> + <key>Path</key> + <string></string> + <key>Status</key> + <false/> + </dict> + <key>IFInstallationScriptsPostupgrade</key> + <dict> + <key>Path</key> + <string></string> + <key>Status</key> + <false/> + </dict> + <key>IFInstallationScriptsPreflight</key> + <dict> + <key>Path</key> + <string></string> + <key>Status</key> + <false/> + </dict> + <key>IFInstallationScriptsPreinstall</key> + <dict> + <key>Path</key> + <string></string> + <key>Status</key> + <false/> + </dict> + <key>IFInstallationScriptsPreupgrade</key> + <dict> + <key>Path</key> + <string></string> + <key>Status</key> + <false/> + </dict> + </dict> + <key>Requirements</key> + <array/> + </dict> + <key>Settings</key> + <dict> + <key>Description</key> + <dict> + <key>International</key> + <dict> + <key>IFPkgDescriptionDeleteWarning</key> + <string></string> + <key>IFPkgDescriptionDescription</key> + <string></string> + <key>IFPkgDescriptionTitle</key> + <string>Chrome Remote Desktop</string> + <key>IFPkgDescriptionVersion</key> + <string>1.4.4</string> + </dict> + </dict> + <key>Display Information</key> + <dict> + <key>CFBundleGetInfoString</key> + <string>Chrome Remote Desktop 1.4.4</string> + <key>CFBundleIconFile</key> + <string></string> + <key>CFBundleIconFile Path Type</key> + <integer>1</integer> + <key>CFBundleIdentifier</key> + <string>com.google.pkg.Chrome Remote Desktop</string> + <key>CFBundleName</key> + <string>Chrome Remote Desktop</string> + <key>CFBundleShortVersionString</key> + <string>1.4.4</string> + </dict> + <key>Version</key> + <dict> + <key>IFMajorVersion</key> + <integer>1</integer> + <key>IFMinorVersion</key> + <integer>4</integer> + </dict> + </dict> + </dict> + <key>IFPkgFlagComponentDirectory</key> + <string>.</string> + <key>IFPkgFlagPackageSelection</key> + <integer>0</integer> + <key>Name</key> + <string>Chrome Remote Desktop</string> + <key>Status</key> + <integer>1</integer> + <key>Type</key> + <integer>0</integer> + </dict> + <key>Name</key> + <string>Project</string> + <key>Settings</key> + <dict> + <key>10.1 Compatibility</key> + <true/> + <key>Build Path</key> + <string>build</string> + <key>Build Path Type</key> + <integer>2</integer> + <key>Comment</key> + <string></string> + <key>Remove .DS_Store</key> + <true/> + <key>Remove .pbdevelopment</key> + <true/> + </dict> +</dict> +</plist> diff --git a/remoting/host/installer/mac/Chromoting.packproj b/remoting/host/installer/mac/Chromoting.packproj new file mode 100644 index 0000000..d35ce06 --- /dev/null +++ b/remoting/host/installer/mac/Chromoting.packproj @@ -0,0 +1,676 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> +<plist version="1.0"> +<dict> + <key>Hierarchy</key> + <dict> + <key>Attributes</key> + <dict> + <key>Documents</key> + <dict> + <key>Background Image</key> + <dict> + <key>IFPkgFlagBackgroundAlignment</key> + <integer>4</integer> + <key>IFPkgFlagBackgroundScaling</key> + <integer>1</integer> + <key>Mode</key> + <integer>0</integer> + <key>Path</key> + <string></string> + <key>Path Type</key> + <integer>1</integer> + </dict> + <key>License</key> + <dict> + <key>International</key> + <dict> + <key>Mode</key> + <integer>0</integer> + <key>Path</key> + <string></string> + <key>Path Type</key> + <integer>1</integer> + </dict> + </dict> + <key>ReadMe</key> + <dict> + <key>International</key> + <dict> + <key>Mode</key> + <integer>0</integer> + <key>Path</key> + <string></string> + <key>Path Type</key> + <integer>1</integer> + </dict> + </dict> + <key>Welcome</key> + <dict> + <key>International</key> + <dict> + <key>Mode</key> + <integer>0</integer> + <key>Path</key> + <string></string> + <key>Path Type</key> + <integer>1</integer> + </dict> + </dict> + </dict> + <key>Files</key> + <dict> + <key>Compress</key> + <true/> + <key>Hierarchy</key> + <dict> + <key>Children</key> + <array> + <dict> + <key>Children</key> + <array> + <dict> + <key>Children</key> + <array/> + <key>GID</key> + <integer>80</integer> + <key>Path</key> + <string>Utilities</string> + <key>Path Type</key> + <integer>1</integer> + <key>Privileges</key> + <integer>509</integer> + <key>Type</key> + <integer>1</integer> + <key>UID</key> + <integer>0</integer> + </dict> + </array> + <key>GID</key> + <integer>80</integer> + <key>Path</key> + <string>Applications</string> + <key>Path Type</key> + <integer>1</integer> + <key>Privileges</key> + <integer>509</integer> + <key>Type</key> + <integer>1</integer> + <key>UID</key> + <integer>0</integer> + </dict> + <dict> + <key>Children</key> + <array> + <dict> + <key>Children</key> + <array/> + <key>GID</key> + <integer>80</integer> + <key>Path</key> + <string>Application Support</string> + <key>Path Type</key> + <integer>1</integer> + <key>Privileges</key> + <integer>509</integer> + <key>Type</key> + <integer>1</integer> + <key>UID</key> + <integer>0</integer> + </dict> + <dict> + <key>Children</key> + <array/> + <key>GID</key> + <integer>80</integer> + <key>Path</key> + <string>Documentation</string> + <key>Path Type</key> + <integer>1</integer> + <key>Privileges</key> + <integer>509</integer> + <key>Type</key> + <integer>1</integer> + <key>UID</key> + <integer>0</integer> + </dict> + <dict> + <key>Children</key> + <array/> + <key>GID</key> + <integer>80</integer> + <key>Path</key> + <string>Filesystems</string> + <key>Path Type</key> + <integer>1</integer> + <key>Privileges</key> + <integer>509</integer> + <key>Type</key> + <integer>1</integer> + <key>UID</key> + <integer>0</integer> + </dict> + <dict> + <key>Children</key> + <array/> + <key>GID</key> + <integer>80</integer> + <key>Path</key> + <string>Frameworks</string> + <key>Path Type</key> + <integer>1</integer> + <key>Privileges</key> + <integer>509</integer> + <key>Type</key> + <integer>1</integer> + <key>UID</key> + <integer>0</integer> + </dict> + <dict> + <key>Children</key> + <array/> + <key>GID</key> + <integer>80</integer> + <key>Path</key> + <string>Internet Plug-Ins</string> + <key>Path Type</key> + <integer>1</integer> + <key>Privileges</key> + <integer>509</integer> + <key>Type</key> + <integer>1</integer> + <key>UID</key> + <integer>0</integer> + </dict> + <dict> + <key>Children</key> + <array> + <dict> + <key>Children</key> + <array/> + <key>GID</key> + <integer>0</integer> + <key>Path</key> + <string>LaunchAgents/org.chromium.chromoting.plist</string> + <key>Path Type</key> + <integer>2</integer> + <key>Privileges</key> + <integer>420</integer> + <key>Type</key> + <integer>3</integer> + <key>UID</key> + <integer>0</integer> + </dict> + </array> + <key>GID</key> + <integer>80</integer> + <key>Path</key> + <string>LaunchAgents</string> + <key>Path Type</key> + <integer>1</integer> + <key>Privileges</key> + <integer>509</integer> + <key>Type</key> + <integer>2</integer> + <key>UID</key> + <integer>0</integer> + </dict> + <dict> + <key>Children</key> + <array/> + <key>GID</key> + <integer>80</integer> + <key>Path</key> + <string>PreferencePanes</string> + <key>Path Type</key> + <integer>1</integer> + <key>Privileges</key> + <integer>509</integer> + <key>Type</key> + <integer>1</integer> + <key>UID</key> + <integer>0</integer> + </dict> + <dict> + <key>Children</key> + <array/> + <key>GID</key> + <integer>80</integer> + <key>Path</key> + <string>Preferences</string> + <key>Path Type</key> + <integer>1</integer> + <key>Privileges</key> + <integer>509</integer> + <key>Type</key> + <integer>1</integer> + <key>UID</key> + <integer>0</integer> + </dict> + <dict> + <key>Children</key> + <array/> + <key>GID</key> + <integer>80</integer> + <key>Path</key> + <string>Printers</string> + <key>Path Type</key> + <integer>1</integer> + <key>Privileges</key> + <integer>509</integer> + <key>Type</key> + <integer>1</integer> + <key>UID</key> + <integer>0</integer> + </dict> + <dict> + <key>Children</key> + <array> + <dict> + <key>Children</key> + <array/> + <key>GID</key> + <integer>80</integer> + <key>Path</key> + <string>PrivilegedHelperTools/org.chromium.chromoting.json</string> + <key>Path Type</key> + <integer>2</integer> + <key>Privileges</key> + <integer>420</integer> + <key>Type</key> + <integer>3</integer> + <key>UID</key> + <integer>0</integer> + </dict> + <dict> + <key>Children</key> + <array/> + <key>GID</key> + <integer>80</integer> + <key>Path</key> + <string>PrivilegedHelperTools/org.chromium.chromoting.me2me.sh</string> + <key>Path Type</key> + <integer>2</integer> + <key>Privileges</key> + <integer>493</integer> + <key>Type</key> + <integer>3</integer> + <key>UID</key> + <integer>0</integer> + </dict> + <dict> + <key>Children</key> + <array/> + <key>GID</key> + <integer>80</integer> + <key>Path</key> + <string>PrivilegedHelperTools/org.chromium.chromoting.me2me_host</string> + <key>Path Type</key> + <integer>2</integer> + <key>Privileges</key> + <integer>493</integer> + <key>Type</key> + <integer>3</integer> + <key>UID</key> + <integer>0</integer> + </dict> + </array> + <key>GID</key> + <integer>80</integer> + <key>Path</key> + <string>PrivilegedHelperTools</string> + <key>Path Type</key> + <integer>1</integer> + <key>Privileges</key> + <integer>509</integer> + <key>Type</key> + <integer>2</integer> + <key>UID</key> + <integer>0</integer> + </dict> + <dict> + <key>Children</key> + <array/> + <key>GID</key> + <integer>80</integer> + <key>Path</key> + <string>QuickTime</string> + <key>Path Type</key> + <integer>1</integer> + <key>Privileges</key> + <integer>509</integer> + <key>Type</key> + <integer>1</integer> + <key>UID</key> + <integer>0</integer> + </dict> + <dict> + <key>Children</key> + <array/> + <key>GID</key> + <integer>80</integer> + <key>Path</key> + <string>Scripts</string> + <key>Path Type</key> + <integer>1</integer> + <key>Privileges</key> + <integer>509</integer> + <key>Type</key> + <integer>1</integer> + <key>UID</key> + <integer>0</integer> + </dict> + </array> + <key>GID</key> + <integer>80</integer> + <key>Path</key> + <string>Library</string> + <key>Path Type</key> + <integer>1</integer> + <key>Privileges</key> + <integer>1021</integer> + <key>Type</key> + <integer>1</integer> + <key>UID</key> + <integer>0</integer> + </dict> + <dict> + <key>Children</key> + <array> + <dict> + <key>Children</key> + <array> + <dict> + <key>Children</key> + <array/> + <key>GID</key> + <integer>0</integer> + <key>Path</key> + <string>Extensions</string> + <key>Path Type</key> + <integer>1</integer> + <key>Privileges</key> + <integer>493</integer> + <key>Type</key> + <integer>1</integer> + <key>UID</key> + <integer>0</integer> + </dict> + </array> + <key>GID</key> + <integer>0</integer> + <key>Path</key> + <string>Library</string> + <key>Path Type</key> + <integer>1</integer> + <key>Privileges</key> + <integer>493</integer> + <key>Type</key> + <integer>1</integer> + <key>UID</key> + <integer>0</integer> + </dict> + </array> + <key>GID</key> + <integer>0</integer> + <key>Path</key> + <string>System</string> + <key>Path Type</key> + <integer>1</integer> + <key>Privileges</key> + <integer>493</integer> + <key>Type</key> + <integer>1</integer> + <key>UID</key> + <integer>0</integer> + </dict> + </array> + <key>GID</key> + <integer>80</integer> + <key>Path</key> + <string>/</string> + <key>Path Type</key> + <integer>1</integer> + <key>Privileges</key> + <integer>1021</integer> + <key>Type</key> + <integer>1</integer> + <key>UID</key> + <integer>0</integer> + </dict> + <key>IFPkgFlagDefaultLocation</key> + <string>/</string> + <key>Imported Package</key> + <false/> + <key>Package Path</key> + <string></string> + <key>Split Forks</key> + <true/> + </dict> + <key>Plugins</key> + <dict> + <key>PluginsList</key> + <array> + <dict> + <key>Path</key> + <string>Introduction</string> + <key>Type</key> + <integer>0</integer> + </dict> + <dict> + <key>Path</key> + <string>ReadMe</string> + <key>Type</key> + <integer>0</integer> + </dict> + <dict> + <key>Path</key> + <string>License</string> + <key>Type</key> + <integer>0</integer> + </dict> + <dict> + <key>Path</key> + <string>Target</string> + <key>Type</key> + <integer>0</integer> + </dict> + <dict> + <key>Path</key> + <string>PackageSelection</string> + <key>Type</key> + <integer>0</integer> + </dict> + <dict> + <key>Path</key> + <string>Install</string> + <key>Type</key> + <integer>0</integer> + </dict> + <dict> + <key>Path</key> + <string>FinishUp</string> + <key>Type</key> + <integer>0</integer> + </dict> + </array> + </dict> + <key>Scripts</key> + <dict> + <key>Additional Resources</key> + <dict> + <key>International</key> + <array/> + </dict> + <key>Installation Scripts</key> + <dict> + <key>IFInstallationScriptsPostflight</key> + <dict> + <key>Path</key> + <string>Scripts/remoting_postflight.sh</string> + <key>Path Type</key> + <integer>2</integer> + <key>Status</key> + <true/> + </dict> + <key>IFInstallationScriptsPostinstall</key> + <dict> + <key>Path</key> + <string></string> + <key>Status</key> + <false/> + </dict> + <key>IFInstallationScriptsPostupgrade</key> + <dict> + <key>Path</key> + <string></string> + <key>Status</key> + <false/> + </dict> + <key>IFInstallationScriptsPreflight</key> + <dict> + <key>Path</key> + <string></string> + <key>Path Type</key> + <integer>2</integer> + <key>Status</key> + <false/> + </dict> + <key>IFInstallationScriptsPreinstall</key> + <dict> + <key>Path</key> + <string></string> + <key>Status</key> + <false/> + </dict> + <key>IFInstallationScriptsPreupgrade</key> + <dict> + <key>Path</key> + <string></string> + <key>Status</key> + <false/> + </dict> + </dict> + <key>Requirements</key> + <array> + <dict> + <key>AlertDialog</key> + <dict> + <key>International</key> + <dict> + <key>MessageKey</key> + <string></string> + <key>TitleKey</key> + <string></string> + </dict> + </dict> + <key>LabelKey</key> + <string>OS >= 10.6</string> + <key>Level</key> + <integer>0</integer> + <key>SpecArgument</key> + <string>sysv</string> + <key>SpecTag</key> + <integer>2</integer> + <key>SpecType</key> + <string>gestalt</string> + <key>Status</key> + <true/> + <key>TestObject</key> + <string>4192</string> + <key>TestOperator</key> + <string>>=</string> + </dict> + </array> + </dict> + <key>Settings</key> + <dict> + <key>Description</key> + <dict> + <key>International</key> + <dict> + <key>IFPkgDescriptionDeleteWarning</key> + <string></string> + <key>IFPkgDescriptionDescription</key> + <string></string> + <key>IFPkgDescriptionTitle</key> + <string>Chromoting</string> + <key>IFPkgDescriptionVersion</key> + <string>0.2</string> + </dict> + </dict> + <key>Display Information</key> + <dict> + <key>CFBundleGetInfoString</key> + <string>Chromoting 0.2 Copyright © 2012 The Chromium Authors.</string> + <key>CFBundleIconFile</key> + <string></string> + <key>CFBundleIconFile Path Type</key> + <integer>1</integer> + <key>CFBundleIdentifier</key> + <string>org.chromium.pkg.Chromoting</string> + <key>CFBundleName</key> + <string>Chromoting</string> + <key>CFBundleShortVersionString</key> + <string>0.2</string> + </dict> + <key>Options</key> + <dict> + <key>IFPkgFlagAllowBackRev</key> + <false/> + <key>IFPkgFlagAuthorizationAction</key> + <integer>1</integer> + <key>IFPkgFlagFollowLinks</key> + <false/> + <key>IFPkgFlagIsRequired</key> + <false/> + <key>IFPkgFlagOverwritePermissions</key> + <false/> + <key>IFPkgFlagRelocatable</key> + <false/> + <key>IFPkgFlagRestartAction</key> + <integer>0</integer> + <key>IFPkgFlagRootVolumeOnly</key> + <true/> + <key>IFPkgFlagUpdateInstalledLanguages</key> + <false/> + </dict> + <key>Version</key> + <dict> + <key>IFMajorVersion</key> + <integer>0</integer> + <key>IFMinorVersion</key> + <integer>2</integer> + </dict> + </dict> + </dict> + <key>IFPkgFlagPackageSelection</key> + <integer>0</integer> + <key>Name</key> + <string>Chromoting</string> + <key>Status</key> + <integer>1</integer> + <key>Type</key> + <integer>1</integer> + </dict> + <key>Name</key> + <string>Project</string> + <key>Settings</key> + <dict> + <key>10.1 Compatibility</key> + <false/> + <key>Build Path</key> + <string>build</string> + <key>Build Path Type</key> + <integer>2</integer> + <key>Comment</key> + <string></string> + <key>Remove .DS_Store</key> + <true/> + <key>Remove .pbdevelopment</key> + <true/> + <key>Remove CVS</key> + <true/> + </dict> +</dict> +</plist> diff --git a/remoting/host/installer/mac/LaunchAgents/org.chromium.chromoting.plist b/remoting/host/installer/mac/LaunchAgents/org.chromium.chromoting.plist new file mode 100644 index 0000000..5e74439 --- /dev/null +++ b/remoting/host/installer/mac/LaunchAgents/org.chromium.chromoting.plist @@ -0,0 +1,27 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> +<plist version="1.0"> +<dict> + <key>Label</key> + <string>org.chromium.chromoting</string> + <key>LimitLoadToSessionType</key> + <array> + <string>Aqua</string> + <string>LoginWindow</string> + </array> + <key>KeepAlive</key> + <dict> + <key>PathState</key> + <dict> + <key>/Library/PrivilegedHelperTools/org.chromium.chromoting.me2me_enabled</key> + <true/> + </dict> + </dict> + <key>Disabled</key> + <false/> + <key>ProgramArguments</key> + <array> + <string>/Library/PrivilegedHelperTools/org.chromium.chromoting.me2me.sh</string> + </array> +</dict> +</plist> diff --git a/remoting/host/installer/mac/PrivilegedHelperTools/org.chromium.chromoting.json b/remoting/host/installer/mac/PrivilegedHelperTools/org.chromium.chromoting.json new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/remoting/host/installer/mac/PrivilegedHelperTools/org.chromium.chromoting.json diff --git a/remoting/host/installer/mac/PrivilegedHelperTools/org.chromium.chromoting.me2me.sh b/remoting/host/installer/mac/PrivilegedHelperTools/org.chromium.chromoting.me2me.sh new file mode 100755 index 0000000..eb7029c --- /dev/null +++ b/remoting/host/installer/mac/PrivilegedHelperTools/org.chromium.chromoting.me2me.sh @@ -0,0 +1,25 @@ +#!/bin/sh + +# 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. + +NAME=org.chromium.chromoting +CONFIG_DIR=/Library/PrivilegedHelperTools +HOST_EXE=$CONFIG_DIR/$NAME.me2me_host +ENABLED_FILE=$CONFIG_DIR/$NAME.me2me_enabled + +if [ "$1" = "--disable" ]; then + # This script is executed from base::mac::ExecuteWithPrivilegesAndWait(), + # which requires the child process to write its PID to stdout before + # anythine else. See base/mac/authorization_util.h for details. + echo $$ + rm -f "$ENABLED_FILE" +elif [ "$1" = "--enable" ]; then + echo $$ + touch "$ENABLED_FILE" +else + exec "$HOST_EXE" \ + --auth-config="$CONFIG_DIR/$NAME.json" \ + --host-config="$CONFIG_DIR/$NAME.json" +fi diff --git a/remoting/host/installer/mac/Scripts/keystone_install.sh b/remoting/host/installer/mac/Scripts/keystone_install.sh new file mode 100755 index 0000000..2ef3b4b --- /dev/null +++ b/remoting/host/installer/mac/Scripts/keystone_install.sh @@ -0,0 +1,7 @@ +#!/bin/sh + +# 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. + +/usr/sbin/installer -pkg "$1/Chrome Remote Desktop.mpkg" -target / diff --git a/remoting/host/installer/mac/Scripts/remoting_postflight.sh b/remoting/host/installer/mac/Scripts/remoting_postflight.sh new file mode 100755 index 0000000..0b30ed2 --- /dev/null +++ b/remoting/host/installer/mac/Scripts/remoting_postflight.sh @@ -0,0 +1,45 @@ +#!/bin/sh + +# 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. + +HELPERTOOLS=/Library/PrivilegedHelperTools +NAME=org.chromium.chromoting +AUTH_FILE="$HELPERTOOLS/$NAME.json" +PLIST=/Library/LaunchAgents/org.chromium.chromoting.plist + +KSADMIN=/Library/Google/GoogleSoftwareUpdate/GoogleSoftwareUpdate.bundle/Contents/MacOS/ksadmin +KSUPDATE=https://tools.google.com/service/update2 +KSPID=com.google.chrome_remote_desktop +KSPVERSION=0.5 + +trap onexit ERR + +function onexit { + # Log an error but don't report an install failure if this script has errors. + logger An error occurred while launching the service + exit 0 +} + +# Update owner and permissions for auth file. +chown $USER "$AUTH_FILE" +chmod 600 "$AUTH_FILE" + +# Load the service. +# The launchctl command we'd like to run: +# launchctl load -w -S Aqua $PLIST +# However, since we're installing as an admin, the launchctl command is run +# as if it had a sudo prefix, which means it tries to load the service in +# system rather than user space. +# To launch the service in user space, we need to get the current user (using +# ps and grepping for the loginwindow.app) and run the launchctl cmd as that +# user (using launchctl bsexec). +set `ps aux | grep loginwindow.app | grep -v grep` +# At this point, $1=username and $2=userid +if [[ -n $1 && -n $2 ]]; then + launchctl bsexec "$2" sudo -u "$1" launchctl load -w -S Aqua $PLIST +fi + +# Register a ticket with Keystone so we're updated. +$KSADMIN --register --productid $KSPID --version $KSPVERSION --xcpath $PLIST --url $KSUPDATE diff --git a/remoting/host/installer/mac/Scripts/uninstall.sh b/remoting/host/installer/mac/Scripts/uninstall.sh new file mode 100755 index 0000000..b2bf00e --- /dev/null +++ b/remoting/host/installer/mac/Scripts/uninstall.sh @@ -0,0 +1,43 @@ +#!/bin/sh + +# 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. + +# TODO(garykac): Replace this with a proper double-clickable uninstaller app. +NAME=org.chromium.chromoting +LAUNCHAGENTS=/Library/LaunchAgents +HELPERTOOLS=/Library/PrivilegedHelperTools +PLIST="$LAUNCHAGENTS/$NAME.plist" + +# Stop service if currently running. +# TODO(garykac): Trap errors and replace sleep with a check for when the +# service is stopped. +launchctl stop $NAME +launchctl unload -w -S Aqua $PLIST +sleep 1 + +# Cleanup files from old versions of installer. +sudo rm -f "$LAUNCHAGENTS/com.google.chrome_remote_desktop.plist" +sudo rm -f "$HELPERTOOLS/remoting_me2me_host" +sudo rm -f "$HELPERTOOLS/me2me.sh" +sudo rm -f "$HELPERTOOLS/com.google.chrome_remote_desktop.me2me_host" +sudo rm -f "$HELPERTOOLS/com.google.chrome_remote_desktop.me2me.sh" +sudo rm -f ~/.ChromotingConfig.json +sudo rm -f "$HELPERTOOLS/auth.json" +sudo rm -f "$HELPERTOOLS/host.json" +sudo rm -f "$HELPERTOOLS/me2me_enabled" +sudo rm -f "$HELPERTOOLS/com.google.chrome_remote_desktop.me2me_enabled" +sudo rm -rf /ChromotingSetup + +# Cleanup installed files. +sudo rm -f $PLIST +sudo rm -f "$HELPERTOOLS/$NAME.me2me_host" +sudo rm -f "$HELPERTOOLS/$NAME.me2me.sh" +sudo rm -f "$HELPERTOOLS/$NAME.json" +sudo rm -f "$HELPERTOOLS/$NAME.me2me_enabled" + +# Unregister our ticket from Keystone. +KSADMIN=/Library/Google/GoogleSoftwareUpdate/GoogleSoftwareUpdate.bundle/Contents/MacOS/ksadmin +KSPID=com.google.chrome_remote_desktop +$KSADMIN --delete --productid $KSPID diff --git a/remoting/host/installer/mac/build.sh b/remoting/host/installer/mac/build.sh new file mode 100755 index 0000000..7754891 --- /dev/null +++ b/remoting/host/installer/mac/build.sh @@ -0,0 +1,54 @@ +#!/bin/sh + +# 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. + +# This script builds the Chrome Remote Desktop installer and packages +# it into a .dmg. It requires that Iceberg be installed (for 'freeze'). + +# The Chrome Remote Desktop installer consists of 2 components: +# * Chromoting installer package +# * Keystone (Google auto-update) + +PKG_DIR=build +PKGPROJ_CHROMOTING='Chromoting.packproj' +PKGPROJ_CHROME_REMOTE_DESKTOP='Chrome Remote Desktop.packproj' +PKG_CHROMOTING='Chromoting.pkg' +PKG_CRD='Chrome Remote Desktop.mpkg' + +DMG_TEMP=dmg_tmp +DMG_NAME='Chrome Remote Desktop' +DMG_DIR="$DMG_TEMP/$DMG_NAME" +DMG_FILENAME='Chrome Remote Desktop.dmg' + +# Clean out previous build. +rm -rf "$PKG_DIR" +rm -f "$DMG_FILENAME" +rm -rf "$DMG_TEMP" # In case previous build failed. + +# Copy latest release build. +# TODO(garykac): Get from proper location. +HOST_BINARY=PrivilegedHelperTools/org.chromium.chromoting.me2me_host +cp ../../../../out/Release/remoting_me2me_host ./$HOST_BINARY + +# Build the .pkg. +echo "Building .pkg..." +freeze "$PKGPROJ_CHROMOTING" +freeze "$PKGPROJ_CHROME_REMOTE_DESKTOP" + +# Create the .dmg. +echo "Building .dmg..." +mkdir -p "$DMG_DIR/$PKG_CRD" +# Copy .mpkg installer. +ditto "$PKG_DIR/$PKG_CRD" "$DMG_DIR/$PKG_CRD" +# Copy uninstall script. +# TODO(garykac): This should be made into a proper App and installed in the +# Applications directory. +cp Scripts/uninstall.sh "$DMG_DIR" +# Copy .keystone_install script to top level of .dmg. +# Keystone calls this script during upgrades. +cp Scripts/keystone_install.sh "$DMG_DIR/.keystone_install" +# Build the .dmg from the directory. +hdiutil create "$DMG_FILENAME" -srcfolder "$DMG_DIR" -ov -quiet +rm -rf "$DMG_TEMP" diff --git a/remoting/host/installer/mac/tools/ksregister.sh b/remoting/host/installer/mac/tools/ksregister.sh new file mode 100755 index 0000000..92f29a8 --- /dev/null +++ b/remoting/host/installer/mac/tools/ksregister.sh @@ -0,0 +1,16 @@ +#!/bin/sh + +# 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. + +NAME=org.chromium.chromoting +PLIST=/Library/LaunchAgents/$NAME.plist + +KSADMIN=/Library/Google/GoogleSoftwareUpdate/GoogleSoftwareUpdate.bundle/Contents/MacOS/ksadmin +KSUPDATE=https://tools.google.com/service/update2 +KSPID=com.google.chrome_remote_desktop +KSPVERSION=0.5 + +# Register a ticket with Keystone so we're updated. +$KSADMIN --register --productid $KSPID --version $KSPVERSION --xcpath $PLIST --url $KSUPDATE diff --git a/remoting/host/installer/mac/tools/ksunregister.sh b/remoting/host/installer/mac/tools/ksunregister.sh new file mode 100755 index 0000000..3d1735d --- /dev/null +++ b/remoting/host/installer/mac/tools/ksunregister.sh @@ -0,0 +1,11 @@ +#!/bin/sh + +# 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. + +KSADMIN=/Library/Google/GoogleSoftwareUpdate/GoogleSoftwareUpdate.bundle/Contents/MacOS/ksadmin +KSPID=com.google.chrome_remote_desktop + +# Unregister our ticket from Keystone. +$KSADMIN --delete --productid $KSPID diff --git a/remoting/host/installer/mac/uninstaller/Chrome Remote Desktop Uninstaller/CRDAppDelegate.h b/remoting/host/installer/mac/uninstaller/Chrome Remote Desktop Uninstaller/CRDAppDelegate.h new file mode 100644 index 0000000..74f69ce --- /dev/null +++ b/remoting/host/installer/mac/uninstaller/Chrome Remote Desktop Uninstaller/CRDAppDelegate.h @@ -0,0 +1,20 @@ +// +// CRDAppDelegate.h +// Chrome Remote Desktop Uninstaller +// +// Created by Gary Kacmarcik on 4/3/12. +// Copyright (c) 2012 __MyCompanyName__. All rights reserved. +// + +#import <Cocoa/Cocoa.h> + +@interface CRDAppDelegate : NSObject <NSApplicationDelegate> + +@property (assign) IBOutlet NSWindow *window; + +- (IBAction)uninstall:(NSButton *)sender; +- (IBAction)cancel:(id)sender; + +- (IBAction)handleMenuClose:(NSMenuItem *)sender; + +@end diff --git a/remoting/host/installer/mac/uninstaller/Chrome Remote Desktop Uninstaller/CRDAppDelegate.m b/remoting/host/installer/mac/uninstaller/Chrome Remote Desktop Uninstaller/CRDAppDelegate.m new file mode 100644 index 0000000..f601fad --- /dev/null +++ b/remoting/host/installer/mac/uninstaller/Chrome Remote Desktop Uninstaller/CRDAppDelegate.m @@ -0,0 +1,225 @@ +// +// CRDAppDelegate.m +// Chrome Remote Desktop Uninstaller +// +// Created by Gary Kacmarcik on 4/3/12. +// Copyright (c) 2012 __MyCompanyName__. All rights reserved. +// + +#import "CRDAppDelegate.h" + +@implementation CRDAppDelegate + +@synthesize window = _window; + +NSString * const kServiceName = @"org.chromium.chromoting"; +NSString * const kLaunchAgents = @"/Library/LaunchAgents"; +NSString * const kHelperTools = @"/Library/PrivilegedHelperTools"; + +// Keystone +NSString * const kKeystoneAdmin = @"/Library/Google/GoogleSoftwareUpdate/" + "GoogleSoftwareUpdate.bundle/Contents/MacOS/" + "ksadmin"; +NSString * const kKeystonePID = @"com.google.chrome_remote_desktop"; + + +- (void)dealloc { + [super dealloc]; +} + +- (void)applicationDidFinishLaunching: (NSNotification *)aNotification { +} + +- (void)logOutput: (FILE *) pipe { + char readBuffer[128]; + for (;;) { + long bytesRead = read(fileno(pipe), readBuffer, sizeof(readBuffer)-1); + if (bytesRead < 1) + break; + readBuffer[bytesRead] = '\0'; + NSLog(@"%s", readBuffer); + } +} + +- (void)messageBox: (char *)message { + CFStringRef message_ref = CFStringCreateWithCString(NULL, message, + (int)strlen(message)); + CFOptionFlags result; + CFUserNotificationDisplayAlert(0, kCFUserNotificationNoteAlertLevel, + NULL, NULL, NULL, + CFSTR("Chrome Remote Desktop Uninstaller"), + message_ref, NULL, NULL, NULL, &result); + CFRelease(message_ref); +} + +- (void)sudoDelete:(const char* const)filename + usingAuth:(AuthorizationRef)authRef { + OSStatus status; + + if ([[NSFileManager defaultManager] fileExistsAtPath:@"/bin/rm"]) { + NSLog(@"rm exists"); + } else { + NSLog(@"rm doesn't exist"); + } + if (![[NSFileManager defaultManager] + fileExistsAtPath:[NSString stringWithFormat:@"%s", filename]]) { + return; + } + + NSLog(@"Executing (as Admin) rm -f %s", filename); + char* tool = "/bin/rm"; + char* const args[] = {"-f", (char* const)filename, NULL}; + FILE* pipe = NULL; + status = AuthorizationExecuteWithPrivileges(authRef, tool, + kAuthorizationFlagDefaults, args, + &pipe); + + // The status 0x8115ffff is endian-swapped 0xffff1581 + // (=errAuthorizationToolExecuteFailure) + if (status == 0xffff1581 || status == 0x8115ffff) { + NSLog(@"Error errAuthorizationToolExecuteFailure"); + } else if (status != errAuthorizationSuccess) { + NSLog(@"Error while executing rm. Status=%x", status); + } else { + [self logOutput: pipe]; + } + + if ([[NSFileManager defaultManager] fileExistsAtPath:@"/bin/rm"]) { + NSLog(@"rm exists"); + } else { + NSLog(@"rm doesn't exist"); + } +} + +-(void)runCommand:(NSString*)cmd + withArguments:(NSArray*)args { + NSTask* task; + NSPipe* output = [NSPipe pipe]; + NSString* result; + + NSLog(@"Executing: %@ %@", cmd, [args componentsJoinedByString:@" "]); + + @try { + task = [[NSTask alloc] init]; + [task setLaunchPath: cmd]; + [task setArguments: args]; + [task setStandardInput: [NSPipe pipe]]; + [task setStandardOutput: output]; + [task launch]; + + NSData* data = [[output fileHandleForReading] readDataToEndOfFile]; + + [task waitUntilExit]; + + if ([task terminationStatus] != 0) { + NSLog(@"Command terminated status=%d reason=%ld", + [task terminationStatus], [task terminationReason]); + } + + result = [[NSString alloc] initWithData:data + encoding:NSUTF8StringEncoding]; + if ([result length] != 0) { + NSLog(@"%@", result); + } + } + @catch (NSException *exception) { + NSLog(@"Exception %@ %@", [exception name], [exception reason]); + } + + [task release]; + [result release]; +} + +-(void)shutdownService { + NSArray* argsStop = [NSArray arrayWithObjects: @"stop", + kServiceName, nil]; + [self runCommand: @"/bin/launchctl" withArguments: argsStop]; + + NSString* plist = [NSString stringWithFormat:@"%@/%@.plist", kLaunchAgents, + kServiceName]; + if ([[NSFileManager defaultManager] fileExistsAtPath:plist]) { + NSArray* argsUnload = [NSArray arrayWithObjects: @"unload", + @"-w", @"-S", @"Aqua", plist, nil]; + [self runCommand: @"/bin/launchctl" withArguments: argsUnload]; + } +} + +-(void)keystoneUnregister { + NSArray* args = [NSArray arrayWithObjects: @"--delete", + @"--productid", kKeystonePID, nil]; + [self runCommand: kKeystoneAdmin withArguments: args]; +} + +- (IBAction)uninstall: (NSButton *)sender { + AuthorizationRef authRef; + OSStatus status; + bool success = false; + + NSLog(@"Chrome Remote Desktop uninstall starting."); + + @try { + status = AuthorizationCreate(NULL, kAuthorizationEmptyEnvironment, + kAuthorizationFlagDefaults, &authRef); + if (status != errAuthorizationSuccess) + NSLog(@"Error during AuthorizationCreate status=%d", status); + + AuthorizationItem right = {kAuthorizationRightExecute, 0, NULL, 0}; + AuthorizationRights rights = {1, &right}; + AuthorizationFlags flags = kAuthorizationFlagDefaults | + kAuthorizationFlagInteractionAllowed | + kAuthorizationFlagPreAuthorize | + kAuthorizationFlagExtendRights; + status = AuthorizationCopyRights(authRef, &rights, NULL, flags, NULL); + if (status != errAuthorizationSuccess) + NSLog(@"Error during AuthorizationCopyRights status=%d", status); + + NSString* host_enabled = [NSString stringWithFormat:@"%@/%@.me2me_enabled", + kHelperTools, kServiceName]; + [self sudoDelete: [host_enabled UTF8String] usingAuth: authRef]; + + [self shutdownService]; + + NSString* plist = [NSString stringWithFormat:@"%@/%@.plist", + kLaunchAgents, kServiceName]; + [self sudoDelete: [plist UTF8String] usingAuth: authRef]; + + NSString* host_binary = [NSString stringWithFormat:@"%@/%@.me2me_host", + kHelperTools, kServiceName]; + [self sudoDelete: [host_binary UTF8String] usingAuth: authRef]; + + NSString* host_script = [NSString stringWithFormat:@"%@/%@.me2me.sh", + kHelperTools, kServiceName]; + [self sudoDelete: [host_script UTF8String] usingAuth: authRef]; + + NSString* auth = [NSString stringWithFormat:@"%@/%@.json", + kHelperTools, kServiceName]; + [self sudoDelete: [auth UTF8String] usingAuth: authRef]; + + [self keystoneUnregister]; + + success = true; + } + @catch (NSException *exception) { + NSLog(@"Exception %@ %@", [exception name], [exception reason]); + } + + @finally { + status = AuthorizationFree(authRef, kAuthorizationFlagDestroyRights); + } + + NSLog(@"Chrome Remote Desktop uninstall complete."); + if (success) + [self messageBox:"Chrome Remote Desktop was successfully uninstalled."]; + + [NSApp terminate:self]; +} + +- (IBAction)cancel: (id)sender { + [NSApp terminate: self]; +} + +- (IBAction)handleMenuClose: (NSMenuItem *)sender { + [NSApp terminate: self]; +} + +@end diff --git a/remoting/host/installer/mac/uninstaller/Chrome Remote Desktop Uninstaller/Chrome Remote Desktop Uninstaller-Info.plist b/remoting/host/installer/mac/uninstaller/Chrome Remote Desktop Uninstaller/Chrome Remote Desktop Uninstaller-Info.plist new file mode 100644 index 0000000..4644404 --- /dev/null +++ b/remoting/host/installer/mac/uninstaller/Chrome Remote Desktop Uninstaller/Chrome Remote Desktop Uninstaller-Info.plist @@ -0,0 +1,34 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> +<plist version="1.0"> +<dict> + <key>CFBundleDevelopmentRegion</key> + <string>en</string> + <key>CFBundleExecutable</key> + <string>${EXECUTABLE_NAME}</string> + <key>CFBundleIconFile</key> + <string></string> + <key>CFBundleIdentifier</key> + <string>com.google.${PRODUCT_NAME:rfc1034identifier}</string> + <key>CFBundleInfoDictionaryVersion</key> + <string>6.0</string> + <key>CFBundleName</key> + <string>${PRODUCT_NAME}</string> + <key>CFBundlePackageType</key> + <string>APPL</string> + <key>CFBundleShortVersionString</key> + <string>1.0</string> + <key>CFBundleSignature</key> + <string>????</string> + <key>CFBundleVersion</key> + <string>1</string> + <key>LSMinimumSystemVersion</key> + <string>${MACOSX_DEPLOYMENT_TARGET}</string> + <key>NSHumanReadableCopyright</key> + <string>Copyright © 2012 Google. All rights reserved.</string> + <key>NSMainNibFile</key> + <string>MainMenu</string> + <key>NSPrincipalClass</key> + <string>NSApplication</string> +</dict> +</plist> diff --git a/remoting/host/installer/mac/uninstaller/Chrome Remote Desktop Uninstaller/Chrome Remote Desktop Uninstaller-Prefix.pch b/remoting/host/installer/mac/uninstaller/Chrome Remote Desktop Uninstaller/Chrome Remote Desktop Uninstaller-Prefix.pch new file mode 100644 index 0000000..6199ebf --- /dev/null +++ b/remoting/host/installer/mac/uninstaller/Chrome Remote Desktop Uninstaller/Chrome Remote Desktop Uninstaller-Prefix.pch @@ -0,0 +1,7 @@ +// +// Prefix header for all source files of the 'Chrome Remote Desktop Uninstaller' target in the 'Chrome Remote Desktop Uninstaller' project +// + +#ifdef __OBJC__ + #import <Cocoa/Cocoa.h> +#endif diff --git a/remoting/host/installer/mac/uninstaller/Chrome Remote Desktop Uninstaller/en.lproj/InfoPlist.strings b/remoting/host/installer/mac/uninstaller/Chrome Remote Desktop Uninstaller/en.lproj/InfoPlist.strings new file mode 100644 index 0000000..477b28f --- /dev/null +++ b/remoting/host/installer/mac/uninstaller/Chrome Remote Desktop Uninstaller/en.lproj/InfoPlist.strings @@ -0,0 +1,2 @@ +/* Localized versions of Info.plist keys */ + diff --git a/remoting/host/installer/mac/uninstaller/Chrome Remote Desktop Uninstaller/en.lproj/MainMenu.xib b/remoting/host/installer/mac/uninstaller/Chrome Remote Desktop Uninstaller/en.lproj/MainMenu.xib new file mode 100644 index 0000000..b6509f5 --- /dev/null +++ b/remoting/host/installer/mac/uninstaller/Chrome Remote Desktop Uninstaller/en.lproj/MainMenu.xib @@ -0,0 +1,898 @@ +<?xml version="1.0" encoding="UTF-8"?> +<archive type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="8.00"> + <data> + <int key="IBDocument.SystemTarget">1060</int> + <string key="IBDocument.SystemVersion">10K549</string> + <string key="IBDocument.InterfaceBuilderVersion">1938</string> + <string key="IBDocument.AppKitVersion">1038.36</string> + <string key="IBDocument.HIToolboxVersion">461.00</string> + <object class="NSMutableDictionary" key="IBDocument.PluginVersions"> + <string key="NS.key.0">com.apple.InterfaceBuilder.CocoaPlugin</string> + <string key="NS.object.0">1938</string> + </object> + <array key="IBDocument.IntegratedClassDependencies"> + <string>NSTextField</string> + <string>NSView</string> + <string>NSWindowTemplate</string> + <string>NSMenu</string> + <string>NSMenuItem</string> + <string>NSTextFieldCell</string> + <string>NSButtonCell</string> + <string>NSButton</string> + <string>NSCustomObject</string> + </array> + <array key="IBDocument.PluginDependencies"> + <string>com.apple.InterfaceBuilder.CocoaPlugin</string> + </array> + <object class="NSMutableDictionary" key="IBDocument.Metadata"> + <string key="NS.key.0">PluginDependencyRecalculationVersion</string> + <integer value="1" key="NS.object.0"/> + </object> + <array class="NSMutableArray" key="IBDocument.RootObjects" id="1048"> + <object class="NSCustomObject" id="1021"> + <string key="NSClassName">NSApplication</string> + </object> + <object class="NSCustomObject" id="1014"> + <string key="NSClassName">FirstResponder</string> + </object> + <object class="NSCustomObject" id="1050"> + <string key="NSClassName">NSApplication</string> + </object> + <object class="NSMenu" id="649796088"> + <string key="NSTitle">AMainMenu</string> + <array class="NSMutableArray" key="NSMenuItems"> + <object class="NSMenuItem" id="694149608"> + <reference key="NSMenu" ref="649796088"/> + <string key="NSTitle">Chrome Remote Desktop Host Uninstaller</string> + <string key="NSKeyEquiv"/> + <int key="NSKeyEquivModMask">1048576</int> + <int key="NSMnemonicLoc">2147483647</int> + <object class="NSCustomResource" key="NSOnImage" id="35465992"> + <string key="NSClassName">NSImage</string> + <string key="NSResourceName">NSMenuCheckmark</string> + </object> + <object class="NSCustomResource" key="NSMixedImage" id="502551668"> + <string key="NSClassName">NSImage</string> + <string key="NSResourceName">NSMenuMixedState</string> + </object> + <string key="NSAction">submenuAction:</string> + <object class="NSMenu" key="NSSubmenu" id="110575045"> + <string key="NSTitle">Chrome Remote Desktop Host Uninstaller</string> + <array class="NSMutableArray" key="NSMenuItems"> + <object class="NSMenuItem" id="238522557"> + <reference key="NSMenu" ref="110575045"/> + <string key="NSTitle">About Chrome Remote Desktop Uninstaller</string> + <string key="NSKeyEquiv"/> + <int key="NSMnemonicLoc">2147483647</int> + <reference key="NSOnImage" ref="35465992"/> + <reference key="NSMixedImage" ref="502551668"/> + </object> + <object class="NSMenuItem" id="304266470"> + <reference key="NSMenu" ref="110575045"/> + <bool key="NSIsDisabled">YES</bool> + <bool key="NSIsSeparator">YES</bool> + <string key="NSTitle"/> + <string key="NSKeyEquiv"/> + <int key="NSKeyEquivModMask">1048576</int> + <int key="NSMnemonicLoc">2147483647</int> + <reference key="NSOnImage" ref="35465992"/> + <reference key="NSMixedImage" ref="502551668"/> + </object> + <object class="NSMenuItem" id="609285721"> + <reference key="NSMenu" ref="110575045"/> + <string key="NSTitle">Preferences…</string> + <string key="NSKeyEquiv">,</string> + <int key="NSKeyEquivModMask">1048576</int> + <int key="NSMnemonicLoc">2147483647</int> + <reference key="NSOnImage" ref="35465992"/> + <reference key="NSMixedImage" ref="502551668"/> + </object> + <object class="NSMenuItem" id="481834944"> + <reference key="NSMenu" ref="110575045"/> + <bool key="NSIsDisabled">YES</bool> + <bool key="NSIsSeparator">YES</bool> + <string key="NSTitle"/> + <string key="NSKeyEquiv"/> + <int key="NSKeyEquivModMask">1048576</int> + <int key="NSMnemonicLoc">2147483647</int> + <reference key="NSOnImage" ref="35465992"/> + <reference key="NSMixedImage" ref="502551668"/> + </object> + <object class="NSMenuItem" id="1046388886"> + <reference key="NSMenu" ref="110575045"/> + <string key="NSTitle">Services</string> + <string key="NSKeyEquiv"/> + <int key="NSKeyEquivModMask">1048576</int> + <int key="NSMnemonicLoc">2147483647</int> + <reference key="NSOnImage" ref="35465992"/> + <reference key="NSMixedImage" ref="502551668"/> + <string key="NSAction">submenuAction:</string> + <object class="NSMenu" key="NSSubmenu" id="752062318"> + <string key="NSTitle">Services</string> + <array class="NSMutableArray" key="NSMenuItems"/> + <string key="NSName">_NSServicesMenu</string> + </object> + </object> + <object class="NSMenuItem" id="646227648"> + <reference key="NSMenu" ref="110575045"/> + <bool key="NSIsDisabled">YES</bool> + <bool key="NSIsSeparator">YES</bool> + <string key="NSTitle"/> + <string key="NSKeyEquiv"/> + <int key="NSKeyEquivModMask">1048576</int> + <int key="NSMnemonicLoc">2147483647</int> + <reference key="NSOnImage" ref="35465992"/> + <reference key="NSMixedImage" ref="502551668"/> + </object> + <object class="NSMenuItem" id="755159360"> + <reference key="NSMenu" ref="110575045"/> + <string key="NSTitle">Hide Chrome Remote Desktop Uninstaller</string> + <string key="NSKeyEquiv">h</string> + <int key="NSKeyEquivModMask">1048576</int> + <int key="NSMnemonicLoc">2147483647</int> + <reference key="NSOnImage" ref="35465992"/> + <reference key="NSMixedImage" ref="502551668"/> + </object> + <object class="NSMenuItem" id="342932134"> + <reference key="NSMenu" ref="110575045"/> + <string key="NSTitle">Hide Others</string> + <string key="NSKeyEquiv">h</string> + <int key="NSKeyEquivModMask">1572864</int> + <int key="NSMnemonicLoc">2147483647</int> + <reference key="NSOnImage" ref="35465992"/> + <reference key="NSMixedImage" ref="502551668"/> + </object> + <object class="NSMenuItem" id="908899353"> + <reference key="NSMenu" ref="110575045"/> + <string key="NSTitle">Show All</string> + <string key="NSKeyEquiv"/> + <int key="NSKeyEquivModMask">1048576</int> + <int key="NSMnemonicLoc">2147483647</int> + <reference key="NSOnImage" ref="35465992"/> + <reference key="NSMixedImage" ref="502551668"/> + </object> + <object class="NSMenuItem" id="1056857174"> + <reference key="NSMenu" ref="110575045"/> + <bool key="NSIsDisabled">YES</bool> + <bool key="NSIsSeparator">YES</bool> + <string key="NSTitle"/> + <string key="NSKeyEquiv"/> + <int key="NSKeyEquivModMask">1048576</int> + <int key="NSMnemonicLoc">2147483647</int> + <reference key="NSOnImage" ref="35465992"/> + <reference key="NSMixedImage" ref="502551668"/> + </object> + <object class="NSMenuItem" id="632727374"> + <reference key="NSMenu" ref="110575045"/> + <string key="NSTitle">Quit Chrome Remote Desktop Uninstaller</string> + <string key="NSKeyEquiv">q</string> + <int key="NSKeyEquivModMask">1048576</int> + <int key="NSMnemonicLoc">2147483647</int> + <reference key="NSOnImage" ref="35465992"/> + <reference key="NSMixedImage" ref="502551668"/> + </object> + </array> + <string key="NSName">_NSAppleMenu</string> + </object> + </object> + <object class="NSMenuItem" id="379814623"> + <reference key="NSMenu" ref="649796088"/> + <string key="NSTitle">File</string> + <string key="NSKeyEquiv"/> + <int key="NSKeyEquivModMask">1048576</int> + <int key="NSMnemonicLoc">2147483647</int> + <reference key="NSOnImage" ref="35465992"/> + <reference key="NSMixedImage" ref="502551668"/> + <string key="NSAction">submenuAction:</string> + <object class="NSMenu" key="NSSubmenu" id="720053764"> + <string key="NSTitle">File</string> + <array class="NSMutableArray" key="NSMenuItems"> + <object class="NSMenuItem" id="705341025"> + <reference key="NSMenu" ref="720053764"/> + <string key="NSTitle">New</string> + <string key="NSKeyEquiv">n</string> + <int key="NSKeyEquivModMask">1048576</int> + <int key="NSMnemonicLoc">2147483647</int> + <reference key="NSOnImage" ref="35465992"/> + <reference key="NSMixedImage" ref="502551668"/> + </object> + <object class="NSMenuItem" id="722745758"> + <reference key="NSMenu" ref="720053764"/> + <string key="NSTitle">Open…</string> + <string key="NSKeyEquiv">o</string> + <int key="NSKeyEquivModMask">1048576</int> + <int key="NSMnemonicLoc">2147483647</int> + <reference key="NSOnImage" ref="35465992"/> + <reference key="NSMixedImage" ref="502551668"/> + </object> + <object class="NSMenuItem" id="425164168"> + <reference key="NSMenu" ref="720053764"/> + <bool key="NSIsDisabled">YES</bool> + <bool key="NSIsSeparator">YES</bool> + <string key="NSTitle"/> + <string key="NSKeyEquiv"/> + <int key="NSKeyEquivModMask">1048576</int> + <int key="NSMnemonicLoc">2147483647</int> + <reference key="NSOnImage" ref="35465992"/> + <reference key="NSMixedImage" ref="502551668"/> + </object> + <object class="NSMenuItem" id="776162233"> + <reference key="NSMenu" ref="720053764"/> + <string key="NSTitle">Close</string> + <string key="NSKeyEquiv">w</string> + <int key="NSKeyEquivModMask">1048576</int> + <int key="NSMnemonicLoc">2147483647</int> + <reference key="NSOnImage" ref="35465992"/> + <reference key="NSMixedImage" ref="502551668"/> + </object> + </array> + </object> + </object> + <object class="NSMenuItem" id="952259628"> + <reference key="NSMenu" ref="649796088"/> + <string key="NSTitle">Edit</string> + <string key="NSKeyEquiv"/> + <int key="NSKeyEquivModMask">1048576</int> + <int key="NSMnemonicLoc">2147483647</int> + <reference key="NSOnImage" ref="35465992"/> + <reference key="NSMixedImage" ref="502551668"/> + <string key="NSAction">submenuAction:</string> + <object class="NSMenu" key="NSSubmenu" id="789758025"> + <string key="NSTitle">Edit</string> + <array class="NSMutableArray" key="NSMenuItems"> + <object class="NSMenuItem" id="1058277027"> + <reference key="NSMenu" ref="789758025"/> + <string key="NSTitle">Undo</string> + <string key="NSKeyEquiv">z</string> + <int key="NSKeyEquivModMask">1048576</int> + <int key="NSMnemonicLoc">2147483647</int> + <reference key="NSOnImage" ref="35465992"/> + <reference key="NSMixedImage" ref="502551668"/> + </object> + <object class="NSMenuItem" id="790794224"> + <reference key="NSMenu" ref="789758025"/> + <string key="NSTitle">Redo</string> + <string key="NSKeyEquiv">Z</string> + <int key="NSKeyEquivModMask">1179648</int> + <int key="NSMnemonicLoc">2147483647</int> + <reference key="NSOnImage" ref="35465992"/> + <reference key="NSMixedImage" ref="502551668"/> + </object> + <object class="NSMenuItem" id="1040322652"> + <reference key="NSMenu" ref="789758025"/> + <bool key="NSIsDisabled">YES</bool> + <bool key="NSIsSeparator">YES</bool> + <string key="NSTitle"/> + <string key="NSKeyEquiv"/> + <int key="NSKeyEquivModMask">1048576</int> + <int key="NSMnemonicLoc">2147483647</int> + <reference key="NSOnImage" ref="35465992"/> + <reference key="NSMixedImage" ref="502551668"/> + </object> + <object class="NSMenuItem" id="296257095"> + <reference key="NSMenu" ref="789758025"/> + <string key="NSTitle">Cut</string> + <string key="NSKeyEquiv">x</string> + <int key="NSKeyEquivModMask">1048576</int> + <int key="NSMnemonicLoc">2147483647</int> + <reference key="NSOnImage" ref="35465992"/> + <reference key="NSMixedImage" ref="502551668"/> + </object> + <object class="NSMenuItem" id="860595796"> + <reference key="NSMenu" ref="789758025"/> + <string key="NSTitle">Copy</string> + <string key="NSKeyEquiv">c</string> + <int key="NSKeyEquivModMask">1048576</int> + <int key="NSMnemonicLoc">2147483647</int> + <reference key="NSOnImage" ref="35465992"/> + <reference key="NSMixedImage" ref="502551668"/> + </object> + <object class="NSMenuItem" id="29853731"> + <reference key="NSMenu" ref="789758025"/> + <string key="NSTitle">Paste</string> + <string key="NSKeyEquiv">v</string> + <int key="NSKeyEquivModMask">1048576</int> + <int key="NSMnemonicLoc">2147483647</int> + <reference key="NSOnImage" ref="35465992"/> + <reference key="NSMixedImage" ref="502551668"/> + </object> + </array> + </object> + </object> + <object class="NSMenuItem" id="448692316"> + <reference key="NSMenu" ref="649796088"/> + <string key="NSTitle">Help</string> + <string key="NSKeyEquiv"/> + <int key="NSMnemonicLoc">2147483647</int> + <reference key="NSOnImage" ref="35465992"/> + <reference key="NSMixedImage" ref="502551668"/> + <string key="NSAction">submenuAction:</string> + <object class="NSMenu" key="NSSubmenu" id="992780483"> + <string key="NSTitle">Help</string> + <array class="NSMutableArray" key="NSMenuItems"> + <object class="NSMenuItem" id="105068016"> + <reference key="NSMenu" ref="992780483"/> + <string key="NSTitle">Chrome Remote Desktop Uninstaller Help</string> + <string key="NSKeyEquiv">?</string> + <int key="NSKeyEquivModMask">1048576</int> + <int key="NSMnemonicLoc">2147483647</int> + <reference key="NSOnImage" ref="35465992"/> + <reference key="NSMixedImage" ref="502551668"/> + </object> + </array> + <string key="NSName">_NSHelpMenu</string> + </object> + </object> + </array> + <string key="NSName">_NSMainMenu</string> + </object> + <object class="NSWindowTemplate" id="972006081"> + <int key="NSWindowStyleMask">3</int> + <int key="NSWindowBacking">2</int> + <string key="NSWindowRect">{{335, 863}, {459, 112}}</string> + <int key="NSWTFlags">1954022400</int> + <string key="NSWindowTitle">Chrome Remote Desktop Uninstaller</string> + <string key="NSWindowClass">NSWindow</string> + <nil key="NSViewClass"/> + <object class="NSView" key="NSWindowView" id="439893737"> + <reference key="NSNextResponder"/> + <int key="NSvFlags">256</int> + <array class="NSMutableArray" key="NSSubviews"> + <object class="NSTextField" id="723400866"> + <reference key="NSNextResponder" ref="439893737"/> + <int key="NSvFlags">268</int> + <string key="NSFrame">{{23, 75}, {379, 17}}</string> + <reference key="NSSuperview" ref="439893737"/> + <reference key="NSNextKeyView" ref="765168480"/> + <bool key="NSEnabled">YES</bool> + <object class="NSTextFieldCell" key="NSCell" id="414645780"> + <int key="NSCellFlags">68288064</int> + <int key="NSCellFlags2">272630784</int> + <string key="NSContents">This will completely remove Chrome Remote Desktop Host.</string> + <object class="NSFont" key="NSSupport" id="720184760"> + <string key="NSName">LucidaGrande</string> + <double key="NSSize">13</double> + <int key="NSfFlags">1044</int> + </object> + <reference key="NSControlView" ref="723400866"/> + <object class="NSColor" key="NSBackgroundColor"> + <int key="NSColorSpace">6</int> + <string key="NSCatalogName">System</string> + <string key="NSColorName">controlColor</string> + <object class="NSColor" key="NSColor"> + <int key="NSColorSpace">3</int> + <bytes key="NSWhite">MC42NjY2NjY2NjY3AA</bytes> + </object> + </object> + <object class="NSColor" key="NSTextColor"> + <int key="NSColorSpace">6</int> + <string key="NSCatalogName">System</string> + <string key="NSColorName">controlTextColor</string> + <object class="NSColor" key="NSColor"> + <int key="NSColorSpace">3</int> + <bytes key="NSWhite">MAA</bytes> + </object> + </object> + </object> + </object> + <object class="NSButton" id="538240118"> + <reference key="NSNextResponder" ref="439893737"/> + <int key="NSvFlags">268</int> + <string key="NSFrame">{{350, 12}, {95, 32}}</string> + <reference key="NSSuperview" ref="439893737"/> + <bool key="NSEnabled">YES</bool> + <object class="NSButtonCell" key="NSCell" id="866114168"> + <int key="NSCellFlags">67239424</int> + <int key="NSCellFlags2">134217728</int> + <string key="NSContents">Uninstall</string> + <reference key="NSSupport" ref="720184760"/> + <reference key="NSControlView" ref="538240118"/> + <int key="NSButtonFlags">-2038284033</int> + <int key="NSButtonFlags2">129</int> + <string key="NSAlternateContents"/> + <string key="NSKeyEquivalent"/> + <int key="NSPeriodicDelay">200</int> + <int key="NSPeriodicInterval">25</int> + </object> + </object> + <object class="NSButton" id="765168480"> + <reference key="NSNextResponder" ref="439893737"/> + <int key="NSvFlags">268</int> + <string key="NSFrame">{{268, 12}, {82, 32}}</string> + <reference key="NSSuperview" ref="439893737"/> + <reference key="NSNextKeyView" ref="538240118"/> + <bool key="NSEnabled">YES</bool> + <object class="NSButtonCell" key="NSCell" id="124666294"> + <int key="NSCellFlags">67239424</int> + <int key="NSCellFlags2">134217728</int> + <string key="NSContents">Cancel</string> + <reference key="NSSupport" ref="720184760"/> + <reference key="NSControlView" ref="765168480"/> + <int key="NSButtonFlags">-2038284033</int> + <int key="NSButtonFlags2">129</int> + <string key="NSAlternateContents"/> + <string type="base64-UTF8" key="NSKeyEquivalent">Gw</string> + <int key="NSPeriodicDelay">200</int> + <int key="NSPeriodicInterval">25</int> + </object> + </object> + </array> + <string key="NSFrameSize">{459, 112}</string> + <reference key="NSSuperview"/> + <reference key="NSNextKeyView" ref="723400866"/> + </object> + <string key="NSScreenRect">{{0, 0}, {1920, 1178}}</string> + <string key="NSMaxSize">{1e+13, 1e+13}</string> + </object> + <object class="NSCustomObject" id="976324537"> + <string key="NSClassName">CRDAppDelegate</string> + </object> + <object class="NSCustomObject" id="755631768"> + <string key="NSClassName">NSFontManager</string> + </object> + </array> + <object class="IBObjectContainer" key="IBDocument.Objects"> + <array class="NSMutableArray" key="connectionRecords"> + <object class="IBConnectionRecord"> + <object class="IBActionConnection" key="connection"> + <string key="label">terminate:</string> + <reference key="source" ref="1050"/> + <reference key="destination" ref="632727374"/> + </object> + <int key="connectionID">449</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBActionConnection" key="connection"> + <string key="label">orderFrontStandardAboutPanel:</string> + <reference key="source" ref="1021"/> + <reference key="destination" ref="238522557"/> + </object> + <int key="connectionID">142</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBOutletConnection" key="connection"> + <string key="label">delegate</string> + <reference key="source" ref="1021"/> + <reference key="destination" ref="976324537"/> + </object> + <int key="connectionID">495</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBActionConnection" key="connection"> + <string key="label">hide:</string> + <reference key="source" ref="1014"/> + <reference key="destination" ref="755159360"/> + </object> + <int key="connectionID">367</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBActionConnection" key="connection"> + <string key="label">hideOtherApplications:</string> + <reference key="source" ref="1014"/> + <reference key="destination" ref="342932134"/> + </object> + <int key="connectionID">368</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBActionConnection" key="connection"> + <string key="label">unhideAllApplications:</string> + <reference key="source" ref="1014"/> + <reference key="destination" ref="908899353"/> + </object> + <int key="connectionID">370</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBActionConnection" key="connection"> + <string key="label">showHelp:</string> + <reference key="source" ref="1014"/> + <reference key="destination" ref="105068016"/> + </object> + <int key="connectionID">493</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBOutletConnection" key="connection"> + <string key="label">window</string> + <reference key="source" ref="976324537"/> + <reference key="destination" ref="972006081"/> + </object> + <int key="connectionID">532</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBActionConnection" key="connection"> + <string key="label">uninstall:</string> + <reference key="source" ref="976324537"/> + <reference key="destination" ref="538240118"/> + </object> + <int key="connectionID">541</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBActionConnection" key="connection"> + <string key="label">cancel:</string> + <reference key="source" ref="976324537"/> + <reference key="destination" ref="765168480"/> + </object> + <int key="connectionID">542</int> + </object> + <object class="IBConnectionRecord"> + <object class="IBActionConnection" key="connection"> + <string key="label">handleMenuClose:</string> + <reference key="source" ref="976324537"/> + <reference key="destination" ref="776162233"/> + </object> + <int key="connectionID">544</int> + </object> + </array> + <object class="IBMutableOrderedSet" key="objectRecords"> + <array key="orderedObjects"> + <object class="IBObjectRecord"> + <int key="objectID">0</int> + <array key="object" id="0"/> + <reference key="children" ref="1048"/> + <nil key="parent"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">-2</int> + <reference key="object" ref="1021"/> + <reference key="parent" ref="0"/> + <string key="objectName">File's Owner</string> + </object> + <object class="IBObjectRecord"> + <int key="objectID">-1</int> + <reference key="object" ref="1014"/> + <reference key="parent" ref="0"/> + <string key="objectName">First Responder</string> + </object> + <object class="IBObjectRecord"> + <int key="objectID">-3</int> + <reference key="object" ref="1050"/> + <reference key="parent" ref="0"/> + <string key="objectName">Application</string> + </object> + <object class="IBObjectRecord"> + <int key="objectID">29</int> + <reference key="object" ref="649796088"/> + <array class="NSMutableArray" key="children"> + <reference ref="694149608"/> + <reference ref="952259628"/> + <reference ref="379814623"/> + <reference ref="448692316"/> + </array> + <reference key="parent" ref="0"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">56</int> + <reference key="object" ref="694149608"/> + <array class="NSMutableArray" key="children"> + <reference ref="110575045"/> + </array> + <reference key="parent" ref="649796088"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">217</int> + <reference key="object" ref="952259628"/> + <array class="NSMutableArray" key="children"> + <reference ref="789758025"/> + </array> + <reference key="parent" ref="649796088"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">83</int> + <reference key="object" ref="379814623"/> + <array class="NSMutableArray" key="children"> + <reference ref="720053764"/> + </array> + <reference key="parent" ref="649796088"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">81</int> + <reference key="object" ref="720053764"/> + <array class="NSMutableArray" key="children"> + <reference ref="722745758"/> + <reference ref="705341025"/> + <reference ref="776162233"/> + <reference ref="425164168"/> + </array> + <reference key="parent" ref="379814623"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">72</int> + <reference key="object" ref="722745758"/> + <reference key="parent" ref="720053764"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">82</int> + <reference key="object" ref="705341025"/> + <reference key="parent" ref="720053764"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">73</int> + <reference key="object" ref="776162233"/> + <reference key="parent" ref="720053764"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">79</int> + <reference key="object" ref="425164168"/> + <reference key="parent" ref="720053764"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">205</int> + <reference key="object" ref="789758025"/> + <array class="NSMutableArray" key="children"> + <reference ref="1058277027"/> + <reference ref="296257095"/> + <reference ref="29853731"/> + <reference ref="860595796"/> + <reference ref="1040322652"/> + <reference ref="790794224"/> + </array> + <reference key="parent" ref="952259628"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">207</int> + <reference key="object" ref="1058277027"/> + <reference key="parent" ref="789758025"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">199</int> + <reference key="object" ref="296257095"/> + <reference key="parent" ref="789758025"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">203</int> + <reference key="object" ref="29853731"/> + <reference key="parent" ref="789758025"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">197</int> + <reference key="object" ref="860595796"/> + <reference key="parent" ref="789758025"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">206</int> + <reference key="object" ref="1040322652"/> + <reference key="parent" ref="789758025"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">215</int> + <reference key="object" ref="790794224"/> + <reference key="parent" ref="789758025"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">57</int> + <reference key="object" ref="110575045"/> + <array class="NSMutableArray" key="children"> + <reference ref="238522557"/> + <reference ref="755159360"/> + <reference ref="908899353"/> + <reference ref="632727374"/> + <reference ref="646227648"/> + <reference ref="609285721"/> + <reference ref="481834944"/> + <reference ref="304266470"/> + <reference ref="1046388886"/> + <reference ref="1056857174"/> + <reference ref="342932134"/> + </array> + <reference key="parent" ref="694149608"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">58</int> + <reference key="object" ref="238522557"/> + <reference key="parent" ref="110575045"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">134</int> + <reference key="object" ref="755159360"/> + <reference key="parent" ref="110575045"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">150</int> + <reference key="object" ref="908899353"/> + <reference key="parent" ref="110575045"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">136</int> + <reference key="object" ref="632727374"/> + <reference key="parent" ref="110575045"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">144</int> + <reference key="object" ref="646227648"/> + <reference key="parent" ref="110575045"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">129</int> + <reference key="object" ref="609285721"/> + <reference key="parent" ref="110575045"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">143</int> + <reference key="object" ref="481834944"/> + <reference key="parent" ref="110575045"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">236</int> + <reference key="object" ref="304266470"/> + <reference key="parent" ref="110575045"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">131</int> + <reference key="object" ref="1046388886"/> + <array class="NSMutableArray" key="children"> + <reference ref="752062318"/> + </array> + <reference key="parent" ref="110575045"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">149</int> + <reference key="object" ref="1056857174"/> + <reference key="parent" ref="110575045"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">145</int> + <reference key="object" ref="342932134"/> + <reference key="parent" ref="110575045"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">130</int> + <reference key="object" ref="752062318"/> + <reference key="parent" ref="1046388886"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">371</int> + <reference key="object" ref="972006081"/> + <array class="NSMutableArray" key="children"> + <reference ref="439893737"/> + </array> + <reference key="parent" ref="0"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">372</int> + <reference key="object" ref="439893737"/> + <array class="NSMutableArray" key="children"> + <reference ref="723400866"/> + <reference ref="538240118"/> + <reference ref="765168480"/> + </array> + <reference key="parent" ref="972006081"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">420</int> + <reference key="object" ref="755631768"/> + <reference key="parent" ref="0"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">490</int> + <reference key="object" ref="448692316"/> + <array class="NSMutableArray" key="children"> + <reference ref="992780483"/> + </array> + <reference key="parent" ref="649796088"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">491</int> + <reference key="object" ref="992780483"/> + <array class="NSMutableArray" key="children"> + <reference ref="105068016"/> + </array> + <reference key="parent" ref="448692316"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">492</int> + <reference key="object" ref="105068016"/> + <reference key="parent" ref="992780483"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">494</int> + <reference key="object" ref="976324537"/> + <reference key="parent" ref="0"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">533</int> + <reference key="object" ref="723400866"/> + <array class="NSMutableArray" key="children"> + <reference ref="414645780"/> + </array> + <reference key="parent" ref="439893737"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">534</int> + <reference key="object" ref="414645780"/> + <reference key="parent" ref="723400866"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">537</int> + <reference key="object" ref="538240118"/> + <array class="NSMutableArray" key="children"> + <reference ref="866114168"/> + </array> + <reference key="parent" ref="439893737"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">538</int> + <reference key="object" ref="866114168"/> + <reference key="parent" ref="538240118"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">539</int> + <reference key="object" ref="765168480"/> + <array class="NSMutableArray" key="children"> + <reference ref="124666294"/> + </array> + <reference key="parent" ref="439893737"/> + </object> + <object class="IBObjectRecord"> + <int key="objectID">540</int> + <reference key="object" ref="124666294"/> + <reference key="parent" ref="765168480"/> + </object> + </array> + </object> + <dictionary class="NSMutableDictionary" key="flattenedProperties"> + <string key="-1.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string> + <string key="-2.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string> + <string key="-3.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string> + <string key="129.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string> + <string key="130.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string> + <string key="131.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string> + <string key="134.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string> + <string key="136.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string> + <string key="143.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string> + <string key="144.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string> + <string key="145.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string> + <string key="149.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string> + <string key="150.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string> + <string key="197.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string> + <string key="199.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string> + <string key="203.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string> + <string key="205.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string> + <string key="206.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string> + <string key="207.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string> + <string key="215.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string> + <string key="217.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string> + <string key="236.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string> + <string key="29.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string> + <boolean value="YES" key="371.IBNSWindowAutoPositionCentersHorizontal"/> + <boolean value="YES" key="371.IBNSWindowAutoPositionCentersVertical"/> + <string key="371.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string> + <string key="371.IBWindowTemplateEditedContentRect">{{380, 496}, {480, 360}}</string> + <integer value="1" key="371.NSWindowTemplate.visibleAtLaunch"/> + <string key="372.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string> + <string key="420.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string> + <string key="490.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string> + <string key="491.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string> + <string key="492.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string> + <string key="494.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string> + <string key="533.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string> + <string key="534.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string> + <string key="537.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string> + <string key="538.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string> + <string key="539.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string> + <string key="540.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string> + <string key="56.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string> + <string key="57.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string> + <string key="58.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string> + <string key="72.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string> + <string key="73.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string> + <string key="79.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string> + <string key="81.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string> + <string key="82.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string> + <string key="83.IBPluginDependency">com.apple.InterfaceBuilder.CocoaPlugin</string> + </dictionary> + <dictionary class="NSMutableDictionary" key="unlocalizedProperties"/> + <nil key="activeLocalization"/> + <dictionary class="NSMutableDictionary" key="localizations"/> + <nil key="sourceID"/> + <int key="maxID">544</int> + </object> + <object class="IBClassDescriber" key="IBDocument.Classes"/> + <int key="IBDocument.localizationMode">0</int> + <string key="IBDocument.TargetRuntimeIdentifier">IBCocoaFramework</string> + <bool key="IBDocument.PluginDeclaredDependenciesTrackSystemTargetVersion">YES</bool> + <int key="IBDocument.defaultPropertyAccessControl">3</int> + <dictionary class="NSMutableDictionary" key="IBDocument.LastKnownImageSizes"> + <string key="NSMenuCheckmark">{9, 8}</string> + <string key="NSMenuMixedState">{7, 2}</string> + </dictionary> + </data> +</archive> diff --git a/remoting/host/installer/mac/uninstaller/Chrome Remote Desktop Uninstaller/main.m b/remoting/host/installer/mac/uninstaller/Chrome Remote Desktop Uninstaller/main.m new file mode 100644 index 0000000..7cde29d --- /dev/null +++ b/remoting/host/installer/mac/uninstaller/Chrome Remote Desktop Uninstaller/main.m @@ -0,0 +1,14 @@ +// +// main.m +// Chrome Remote Desktop Uninstaller +// +// Created by Gary Kacmarcik on 4/3/12. +// Copyright (c) 2012 __MyCompanyName__. All rights reserved. +// + +#import <Cocoa/Cocoa.h> + +int main(int argc, char *argv[]) +{ + return NSApplicationMain(argc, (const char **)argv); +} |