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

Unified Diff: chrome/installer/mac/app/AppDelegate.m

Issue 2203583002: Added unpacking step (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Added use of temporary folders, removed semaphore from main installer code, adjusted some files' APIs, resolved remaining comments Created 4 years, 4 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 side-by-side diff with in-line comments
Download patch
Index: chrome/installer/mac/app/AppDelegate.m
diff --git a/chrome/installer/mac/app/AppDelegate.m b/chrome/installer/mac/app/AppDelegate.m
index f60f0db6e36ed8641e1c40dca619541c7b868187..49e902bc1e87ace260e44e6025dff4acefe91172 100644
--- a/chrome/installer/mac/app/AppDelegate.m
+++ b/chrome/installer/mac/app/AppDelegate.m
@@ -4,9 +4,12 @@
#import "AppDelegate.h"
+#import "Downloader.h"
#import "InstallerWindowController.h"
#import "NSError+ChromeInstallerAdditions.h"
#import "NSAlert+ChromeInstallerAdditions.h"
+#import "OmahaCommunication.h"
+#import "Unpacker.h"
@interface NSAlert ()
- (void)beginSheetModalForWindow:(NSWindow*)sheetWindow
@@ -14,7 +17,9 @@
(void (^__nullable)(NSModalResponse returnCode))handler;
@end
-@interface AppDelegate ()<OmahaCommunicationDelegate, DownloaderDelegate> {
+@interface AppDelegate ()<OmahaCommunicationDelegate,
+ DownloaderDelegate,
+ UnpackDelegate> {
InstallerWindowController* installerWindowController_;
}
@property(strong) NSWindow* window;
@@ -45,14 +50,16 @@
[omahaMessenger fetchDownloadURLs];
}
-- (void)onOmahaSuccessWithURLs:(NSArray*)URLs {
+- (void)omahaCommunication:(OmahaCommunication*)messenger
+ onOmahaSuccessWithURLs:(NSArray*)URLs {
[installerWindowController_ updateStatusDescription:@"Downloading..."];
Downloader* download = [[Downloader alloc] init];
download.delegate = self;
- [download downloadChromeImageToDownloadsDirectory:[URLs firstObject]];
+ [download downloadChromeImageFrom:[URLs firstObject]];
}
-- (void)onOmahaFailureWithError:(NSError*)error {
+- (void)omahaCommunication:(OmahaCommunication*)messenger
+ onOmahaFailureWithError:(NSError*)error {
NSError* networkError =
[NSError errorForAlerts:@"Network Error"
withDescription:@"Could not connect to Chrome server."
@@ -62,15 +69,21 @@
// Bridge method from Downloader to InstallerWindowController. Allows Downloader
// to update the progressbar without having direct access to any UI obejcts.
-- (void)didDownloadData:(double)downloadProgressPercentage {
+- (void)downloader:(Downloader*)download
+ didDownloadData:(double)downloadProgressPercentage {
[installerWindowController_
updateDownloadProgress:(double)downloadProgressPercentage];
}
- (void)downloader:(Downloader*)download
- onDownloadSuccess:(NSURL*)diskImagePath {
+ onDownloadSuccessWithDiskURL:(NSURL*)diskImagePath {
[installerWindowController_ updateStatusDescription:@"Done."];
- // TODO: replace the line of code below with real code someday
+
+ Unpacker* unpacker = [[Unpacker alloc]
Elly Fong-Jones 2016/08/16 15:26:18 who owns the unpacker? it looks like we don't stor
Anna Zeng 2016/08/16 23:07:39 Currently, nobody owns it, just the same as how we
Sidney San Martín 2016/08/17 22:09:06 ellyjones@: Just curious, is the plan to use ARC f
+ initWithFinalAppPath:@"/Applications/Google Chromo.app"];
+ unpacker.delegate = self;
+
+ [unpacker mountDMGFromURL:diskImagePath];
}
- (void)downloader:(Downloader*)download
@@ -82,6 +95,46 @@
[self displayError:downloadError];
}
+- (void)unpacker:(Unpacker*)unpacker onMountSuccess:(NSString*)mountpath {
+ [unpacker extractChrome];
+}
+
+// TODO: adjust error descriptions for the following failure methods
+- (void)unpacker:(Unpacker*)unpacker onMountFailure:(NSString*)mountpath {
+ NSError* mountError =
+ [NSError errorForAlerts:@"Install Failure"
+ withDescription:@"Unable to add Google Chrome to Applications."
+ isRecoverable:NO];
+ [self displayError:mountError];
+}
+
+- (void)unpacker:(Unpacker*)unpacker onExtractSuccess:(NSString*)appPath {
+ [unpacker unmountDMG];
+}
+
+- (void)unpacker:(Unpacker*)unpacker onExtractFailure:(NSString*)appPath {
+ NSError* extractError =
+ [NSError errorForAlerts:@"Install Failure"
+ withDescription:@"Unable to add Google Chrome to Applications."
+ isRecoverable:NO];
+ [self displayError:extractError];
+}
+
+- (void)unpacker:(Unpacker*)unpacker onUnmountSuccess:(NSError*)error {
+ // TODO: change the name of chromo to chrome
+ if (![[NSWorkspace sharedWorkspace] launchApplication:@"Google Chromo"]) {
Sidney San Martín 2016/08/13 12:37:18 Pass the full path or use `launchApplicationAtURL:
Elly Fong-Jones 2016/08/16 15:26:18 Also, we're not called "Chromo" :)
Anna Zeng 2016/08/16 23:07:39 Done.
Anna Zeng 2016/08/16 23:07:39 I made a note of this, and added a TODO to make th
+ NSLog(@"Chromo failed to launch");
+ }
+}
+
+- (void)unpacker:(Unpacker*)unpacker onUnmountFailure:(NSString*)appPath {
+ NSError* extractError =
+ [NSError errorForAlerts:@"Install Failure"
+ withDescription:@"Unable to add Google Chrome to Applications."
+ isRecoverable:NO];
+ [self displayError:extractError];
Sidney San Martín 2016/08/13 12:37:18 Is an unmount failure fatal/worth showing the user
Anna Zeng 2016/08/16 23:07:39 This is true! I have now moved the unmount step to
+}
+
// Displays an alert on the main window using the contents of the passed in
// error.
- (void)displayError:(NSError*)error {

Powered by Google App Engine
This is Rietveld 408576698