Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(345)

Side by Side Diff: chrome/installer/mac/app/AppDelegate.m

Issue 2281263003: Use AuthorizedInstall to move Chrome into place and set up permissions (Closed)
Patch Set: Bridge pointer bug fixes, integration of AuthorizedInstall Created 4 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | chrome/installer/mac/app/Unpacker.m » ('j') | chrome/installer/mac/app/Unpacker.m » ('J')
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2016 The Chromium Authors. All rights reserved. 1 // Copyright 2016 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 "AppDelegate.h" 5 #import "AppDelegate.h"
6 6
7 #import "Downloader.h" 7 #import "Downloader.h"
8 #import "InstallerWindowController.h" 8 #import "InstallerWindowController.h"
9 #import "NSError+ChromeInstallerAdditions.h" 9 #import "NSError+ChromeInstallerAdditions.h"
10 #import "NSAlert+ChromeInstallerAdditions.h" 10 #import "NSAlert+ChromeInstallerAdditions.h"
(...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after
107 107
108 // Bridge method from Downloader to InstallerWindowController. Allows Downloader 108 // Bridge method from Downloader to InstallerWindowController. Allows Downloader
109 // to update the progressbar without having direct access to any UI obejcts. 109 // to update the progressbar without having direct access to any UI obejcts.
110 - (void)downloader:(Downloader*)download percentProgress:(double)percentage { 110 - (void)downloader:(Downloader*)download percentProgress:(double)percentage {
111 [installerWindowController_ updateDownloadProgress:(double)percentage]; 111 [installerWindowController_ updateDownloadProgress:(double)percentage];
112 } 112 }
113 113
114 - (void)downloader:(Downloader*)download onSuccess:(NSURL*)diskImageURL { 114 - (void)downloader:(Downloader*)download onSuccess:(NSURL*)diskImageURL {
115 [installerWindowController_ updateStatusDescription:@"Installing..."]; 115 [installerWindowController_ updateStatusDescription:@"Installing..."];
116 [installerWindowController_ enableLaunchButton]; 116 [installerWindowController_ enableLaunchButton];
117 // TODO: Add unpacking step here and pass the path to the app bundle inside
118 // the mounted disk image path to startInstall. Currently passing hardcoded
119 // path to preunpacked app bundle.
120 //[authorizedInstall_
121 // startInstall:@"$HOME/Downloads/Google Chrome.app"];
122 117
123 Unpacker* unpacker = [[Unpacker alloc] init]; 118 Unpacker* unpacker = [[Unpacker alloc] init];
124 unpacker.delegate = self; 119 unpacker.delegate = self;
125 [unpacker mountDMGFromURL:diskImageURL]; 120 [unpacker mountDMGFromURL:diskImageURL];
126 } 121 }
127 122
128 - (void)downloader:(Downloader*)download onFailure:(NSError*)error { 123 - (void)downloader:(Downloader*)download onFailure:(NSError*)error {
129 NSError* downloadError = 124 NSError* downloadError =
130 [NSError errorForAlerts:@"Download Failure" 125 [NSError errorForAlerts:@"Download Failure"
131 withDescription:@"Unable to download Google Chrome." 126 withDescription:@"Unable to download Google Chrome."
132 isRecoverable:NO]; 127 isRecoverable:NO];
133 [self displayError:downloadError]; 128 [self displayError:downloadError];
134 } 129 }
135 130
136 - (void)unpacker:(Unpacker*)unpacker onMountSuccess:(NSString*)tempAppPath { 131 - (void)unpacker:(Unpacker*)unpacker onMountSuccess:(NSString*)tempAppPath {
132 SecStaticCodeRef diskStaticCode;
133 SecRequirementRef diskRequirement;
134 SecStaticCodeCreateWithPath(
135 (CFURLRef)CFBridgingRetain(
136 [NSURL fileURLWithPath:tempAppPath isDirectory:NO]),
137 kSecCSDefaultFlags, &diskStaticCode);
138 // TODO: update the requirement in here
139 SecRequirementCreateWithString((CFStringRef) @"anchor apple generic",
140 kSecCSDefaultFlags, &diskRequirement);
141 OSStatus oserror = 0;
142 if ((oserror = SecStaticCodeCheckValidity(diskStaticCode, kSecCSDefaultFlags,
143 diskRequirement)) !=
144 errSecSuccess) {
145 // TODO: add in more reasonable error handling
146 NSLog(@"verification failed: %d", oserror);
147 }
148
137 // Calling this function will change the progress bar into an indeterminate 149 // Calling this function will change the progress bar into an indeterminate
138 // one. We won't need to update the progress bar any more after this point. 150 // one. We won't need to update the progress bar any more after this point.
139 [installerWindowController_ updateDownloadProgress:-1.0]; 151 [installerWindowController_ updateDownloadProgress:-1.0];
140 // By disabling closing the window or quitting, we can tell the user that 152 // By disabling closing the window or quitting, we can tell the user that
141 // closing the application at this point is not a good idea. 153 // closing the application at this point is not a good idea.
142 window_.styleMask &= ~NSClosableWindowMask; 154 window_.styleMask &= ~NSClosableWindowMask;
143 preventTermination_ = YES; 155 preventTermination_ = YES;
144 156
145 // TODO: move the below code into AuthorizedInstall 157 NSString* chromeInApplicationsFolder =
146 NSString* chromeInApplicationsFolder = @"/Applications/Google Chromo.app"; 158 [authorizedInstall_ startInstall:tempAppPath];
147 159
148 NSError* error = nil; 160 NSError* error = nil;
149 if ([[NSFileManager defaultManager]
150 fileExistsAtPath:chromeInApplicationsFolder]) {
151 [[NSFileManager defaultManager] moveItemAtPath:chromeInApplicationsFolder
152 toPath:tempAppPath
153 error:nil];
154 }
155 if (![[NSFileManager defaultManager] moveItemAtPath:tempAppPath
156 toPath:chromeInApplicationsFolder
157 error:&error]) {
158 NSLog(@"%@", error);
159 }
160 // TODO: move the above code into AuthorizedInstall
161
162 [[NSWorkspace sharedWorkspace] 161 [[NSWorkspace sharedWorkspace]
163 launchApplicationAtURL:[NSURL fileURLWithPath:chromeInApplicationsFolder 162 launchApplicationAtURL:[NSURL fileURLWithPath:chromeInApplicationsFolder
164 isDirectory:NO] 163 isDirectory:NO]
165 options:NSWorkspaceLaunchDefault 164 options:NSWorkspaceLaunchDefault
166 configuration:@{} 165 configuration:@{}
167 error:&error]; 166 error:&error];
168 if (error) { 167 if (error) {
169 NSLog(@"Chrome failed to launch: %@", error); 168 NSLog(@"Chrome failed to launch: %@", error);
170 } 169 }
171 170
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
209 if (returnCode != [alertForUser quitResponse]) { 208 if (returnCode != [alertForUser quitResponse]) {
210 [self startDownload]; 209 [self startDownload];
211 } else { 210 } else {
212 [NSApp terminate:nil]; 211 [NSApp terminate:nil];
213 } 212 }
214 }]; 213 }];
215 }); 214 });
216 } 215 }
217 216
218 @end 217 @end
OLDNEW
« no previous file with comments | « no previous file | chrome/installer/mac/app/Unpacker.m » ('j') | chrome/installer/mac/app/Unpacker.m » ('J')

Powered by Google App Engine
This is Rietveld 408576698