OLD | NEW |
1 // Copyright (c) 2009 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2009 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/app/keystone_glue.h" | 5 #import "chrome/app/keystone_glue.h" |
6 | 6 |
7 #include "base/logging.h" | 7 #include "base/logging.h" |
8 #include "base/mac_util.h" | 8 #include "base/mac_util.h" |
9 #import "base/worker_pool_mac.h" | 9 #import "base/worker_pool_mac.h" |
10 #include "chrome/common/chrome_constants.h" | 10 #include "chrome/common/chrome_constants.h" |
11 | 11 |
| 12 namespace { |
| 13 |
12 // Provide declarations of the Keystone registration bits needed here. From | 14 // Provide declarations of the Keystone registration bits needed here. From |
13 // KSRegistration.h. | 15 // KSRegistration.h. |
14 typedef enum { kKSPathExistenceChecker } KSExistenceCheckerType; | 16 typedef enum { kKSPathExistenceChecker } KSExistenceCheckerType; |
15 | 17 |
16 NSString *KSRegistrationCheckForUpdateNotification = | 18 NSString *KSRegistrationCheckForUpdateNotification = |
17 @"KSRegistrationCheckForUpdateNotification"; | 19 @"KSRegistrationCheckForUpdateNotification"; |
18 NSString *KSRegistrationStatusKey = @"Status"; | 20 NSString *KSRegistrationStatusKey = @"Status"; |
19 NSString *KSRegistrationVersionKey = @"Version"; | 21 NSString *KSRegistrationVersionKey = @"Version"; |
| 22 NSString *KSRegistrationUpdateCheckErrorKey = @"Error"; |
20 | 23 |
21 NSString *KSRegistrationStartUpdateNotification = | 24 NSString *KSRegistrationStartUpdateNotification = |
22 @"KSRegistrationStartUpdateNotification"; | 25 @"KSRegistrationStartUpdateNotification"; |
23 NSString *KSUpdateCheckSuccessfulKey = @"CheckSuccessful"; | 26 NSString *KSUpdateCheckSuccessfulKey = @"CheckSuccessful"; |
24 NSString *KSUpdateCheckSuccessfullyInstalledKey = @"SuccessfullyInstalled"; | 27 NSString *KSUpdateCheckSuccessfullyInstalledKey = @"SuccessfullyInstalled"; |
25 | 28 |
26 NSString *KSRegistrationRemoveExistingTag = @""; | 29 NSString *KSRegistrationRemoveExistingTag = @""; |
27 #define KSRegistrationPreserveExistingTag nil | 30 #define KSRegistrationPreserveExistingTag nil |
28 | 31 |
| 32 } // namespace |
| 33 |
29 @interface KSRegistration : NSObject | 34 @interface KSRegistration : NSObject |
30 | 35 |
31 + (id)registrationWithProductID:(NSString*)productID; | 36 + (id)registrationWithProductID:(NSString*)productID; |
32 | 37 |
33 // Older API | 38 // Older API |
34 - (BOOL)registerWithVersion:(NSString*)version | 39 - (BOOL)registerWithVersion:(NSString*)version |
35 existenceCheckerType:(KSExistenceCheckerType)xctype | 40 existenceCheckerType:(KSExistenceCheckerType)xctype |
36 existenceCheckerString:(NSString*)xc | 41 existenceCheckerString:(NSString*)xc |
37 serverURLString:(NSString*)serverURLString; | 42 serverURLString:(NSString*)serverURLString; |
38 // Newer API | 43 // Newer API |
(...skipping 207 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
246 [self updateStatus:kAutoupdateChecking version:nil]; | 251 [self updateStatus:kAutoupdateChecking version:nil]; |
247 | 252 |
248 [registration_ checkForUpdate]; | 253 [registration_ checkForUpdate]; |
249 | 254 |
250 // Upon completion, KSRegistrationCheckForUpdateNotification will be posted, | 255 // Upon completion, KSRegistrationCheckForUpdateNotification will be posted, |
251 // and -checkForUpdateComplete: will be called. | 256 // and -checkForUpdateComplete: will be called. |
252 } | 257 } |
253 | 258 |
254 - (void)checkForUpdateComplete:(NSNotification*)notification { | 259 - (void)checkForUpdateComplete:(NSNotification*)notification { |
255 NSDictionary* userInfo = [notification userInfo]; | 260 NSDictionary* userInfo = [notification userInfo]; |
256 BOOL updatesAvailable = | |
257 [[userInfo objectForKey:KSRegistrationStatusKey] boolValue]; | |
258 | 261 |
259 if (updatesAvailable) { | 262 if ([[userInfo objectForKey:KSRegistrationUpdateCheckErrorKey] boolValue]) { |
| 263 [self updateStatus:kAutoupdateCheckFailed version:nil]; |
| 264 } else if ([[userInfo objectForKey:KSRegistrationStatusKey] boolValue]) { |
260 // If an update is known to be available, go straight to | 265 // If an update is known to be available, go straight to |
261 // -updateStatus:version:. It doesn't matter what's currently on disk. | 266 // -updateStatus:version:. It doesn't matter what's currently on disk. |
262 NSString* version = [userInfo objectForKey:KSRegistrationVersionKey]; | 267 NSString* version = [userInfo objectForKey:KSRegistrationVersionKey]; |
263 [self updateStatus:kAutoupdateAvailable version:version]; | 268 [self updateStatus:kAutoupdateAvailable version:version]; |
264 } else { | 269 } else { |
265 // If no updates are available, check what's on disk, because an update | 270 // If no updates are available, check what's on disk, because an update |
266 // may have already been installed. This check happens on another thread, | 271 // may have already been installed. This check happens on another thread, |
267 // and -updateStatus:version: will be called on the main thread when done. | 272 // and -updateStatus:version: will be called on the main thread when done. |
268 [self determineUpdateStatusAsync]; | 273 [self determineUpdateStatusAsync]; |
269 } | 274 } |
(...skipping 10 matching lines...) Expand all Loading... |
280 [self updateStatus:kAutoupdateInstalling version:nil]; | 285 [self updateStatus:kAutoupdateInstalling version:nil]; |
281 | 286 |
282 [registration_ startUpdate]; | 287 [registration_ startUpdate]; |
283 | 288 |
284 // Upon completion, KSRegistrationStartUpdateNotification will be posted, | 289 // Upon completion, KSRegistrationStartUpdateNotification will be posted, |
285 // and -installUpdateComplete: will be called. | 290 // and -installUpdateComplete: will be called. |
286 } | 291 } |
287 | 292 |
288 - (void)installUpdateComplete:(NSNotification*)notification { | 293 - (void)installUpdateComplete:(NSNotification*)notification { |
289 NSDictionary* userInfo = [notification userInfo]; | 294 NSDictionary* userInfo = [notification userInfo]; |
290 BOOL checkSuccessful = | |
291 [[userInfo objectForKey:KSUpdateCheckSuccessfulKey] boolValue]; | |
292 int installs = | |
293 [[userInfo objectForKey:KSUpdateCheckSuccessfullyInstalledKey] intValue]; | |
294 | 295 |
295 if (!checkSuccessful || !installs) { | 296 if (![[userInfo objectForKey:KSUpdateCheckSuccessfulKey] boolValue] || |
| 297 ![[userInfo objectForKey:KSUpdateCheckSuccessfullyInstalledKey] |
| 298 intValue]) { |
296 [self updateStatus:kAutoupdateInstallFailed version:nil]; | 299 [self updateStatus:kAutoupdateInstallFailed version:nil]; |
297 } else { | 300 } else { |
298 updateSuccessfullyInstalled_ = YES; | 301 updateSuccessfullyInstalled_ = YES; |
299 | 302 |
300 // Nothing in the notification dictionary reports the version that was | 303 // Nothing in the notification dictionary reports the version that was |
301 // installed. Figure it out based on what's on disk. | 304 // installed. Figure it out based on what's on disk. |
302 [self determineUpdateStatusAsync]; | 305 [self determineUpdateStatusAsync]; |
303 } | 306 } |
304 } | 307 } |
305 | 308 |
(...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
395 return static_cast<AutoupdateStatus>( | 398 return static_cast<AutoupdateStatus>( |
396 [[dictionary objectForKey:kAutoupdateStatusStatus] intValue]); | 399 [[dictionary objectForKey:kAutoupdateStatusStatus] intValue]); |
397 } | 400 } |
398 | 401 |
399 - (BOOL)asyncOperationPending { | 402 - (BOOL)asyncOperationPending { |
400 AutoupdateStatus status = [self recentStatus]; | 403 AutoupdateStatus status = [self recentStatus]; |
401 return status == kAutoupdateChecking || status == kAutoupdateInstalling; | 404 return status == kAutoupdateChecking || status == kAutoupdateInstalling; |
402 } | 405 } |
403 | 406 |
404 @end // @implementation KeystoneGlue | 407 @end // @implementation KeystoneGlue |
OLD | NEW |