| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 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 | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #import "chrome/browser/mac/dock.h" | 5 #import "chrome/browser/mac/dock.h" |
| 6 | 6 |
| 7 #include <ApplicationServices/ApplicationServices.h> | 7 #include <ApplicationServices/ApplicationServices.h> |
| 8 #include <CoreFoundation/CoreFoundation.h> | 8 #include <CoreFoundation/CoreFoundation.h> |
| 9 #import <Foundation/Foundation.h> | 9 #import <Foundation/Foundation.h> |
| 10 #include <signal.h> | 10 #include <signal.h> |
| (...skipping 105 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 116 return nil; | 116 return nil; |
| 117 } | 117 } |
| 118 | 118 |
| 119 NSString* path = [url path]; | 119 NSString* path = [url path]; |
| 120 [app_paths addObject:path]; | 120 [app_paths addObject:path]; |
| 121 } | 121 } |
| 122 | 122 |
| 123 return app_paths; | 123 return app_paths; |
| 124 } | 124 } |
| 125 | 125 |
| 126 // Restart the Dock process by sending it a SIGHUP. | 126 // Restart the Dock process by sending it a SIGTERM. |
| 127 void Restart() { | 127 void Restart() { |
| 128 // Doing this via launchd using the proper job label is the safest way to | 128 // Doing this via launchd using the proper job label is the safest way to |
| 129 // handle the restart. Unlike "killall Dock", looking this up via launchd | 129 // handle the restart. Unlike "killall Dock", looking this up via launchd |
| 130 // guarantees that only the right process will be targeted. | 130 // guarantees that only the right process will be targeted. |
| 131 pid_t pid = base::mac::PIDForJob("com.apple.Dock.agent"); | 131 pid_t pid = base::mac::PIDForJob("com.apple.Dock.agent"); |
| 132 if (pid <= 0) { | 132 if (pid <= 0) { |
| 133 return; | 133 return; |
| 134 } | 134 } |
| 135 | 135 |
| 136 // Sending a SIGHUP to the Dock seems to be a more reliable way to get the | 136 // Sending a SIGTERM to the Dock seems to be a more reliable way to get the |
| 137 // replacement Dock process to read the newly written plist than using the | 137 // replacement Dock process to read the newly written plist than using the |
| 138 // equivalent of "launchctl stop" (even if followed by "launchctl start.") | 138 // equivalent of "launchctl stop" (even if followed by "launchctl start.") |
| 139 // Note that this is a potential race in that pid may no longer be valid or | 139 // Note that this is a potential race in that pid may no longer be valid or |
| 140 // may even have been reused. | 140 // may even have been reused. |
| 141 kill(pid, SIGHUP); | 141 kill(pid, SIGTERM); |
| 142 } | 142 } |
| 143 | 143 |
| 144 } // namespace | 144 } // namespace |
| 145 | 145 |
| 146 AddIconStatus AddIcon(NSString* installed_path, NSString* dmg_app_path) { | 146 AddIconStatus AddIcon(NSString* installed_path, NSString* dmg_app_path) { |
| 147 // ApplicationServices.framework/Frameworks/HIServices.framework contains an | 147 // ApplicationServices.framework/Frameworks/HIServices.framework contains an |
| 148 // undocumented function, CoreDockAddFileToDock, that is able to add items | 148 // undocumented function, CoreDockAddFileToDock, that is able to add items |
| 149 // to the Dock "live" without requiring a Dock restart. Under the hood, it | 149 // to the Dock "live" without requiring a Dock restart. Under the hood, it |
| 150 // communicates with the Dock via Mach IPC. It is available as of Mac OS X | 150 // communicates with the Dock via Mach IPC. It is available as of Mac OS X |
| 151 // 10.6. AddIcon could call CoreDockAddFileToDock if available, but | 151 // 10.6. AddIcon could call CoreDockAddFileToDock if available, but |
| (...skipping 178 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 330 | 330 |
| 331 // Rewrite the plist. | 331 // Rewrite the plist. |
| 332 [dock_plist setObject:persistent_apps forKey:kDockPersistentAppsKey]; | 332 [dock_plist setObject:persistent_apps forKey:kDockPersistentAppsKey]; |
| 333 [user_defaults setPersistentDomain:dock_plist forName:kDockDomain]; | 333 [user_defaults setPersistentDomain:dock_plist forName:kDockDomain]; |
| 334 | 334 |
| 335 Restart(); | 335 Restart(); |
| 336 return IconAddSuccess; | 336 return IconAddSuccess; |
| 337 } | 337 } |
| 338 | 338 |
| 339 } // namespace dock | 339 } // namespace dock |
| OLD | NEW |