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

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

Issue 2094583004: Initial commit for Chrome metainstaller on Mac. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Additional progress addressing downloader and parser, moved BUILD dependencies away from root. Created 4 years, 6 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/downloader.m
diff --git a/chrome/installer/mac/app/downloader.m b/chrome/installer/mac/app/downloader.m
new file mode 100644
index 0000000000000000000000000000000000000000..45f12bb72e050fdf85376c2eae3049f0ffb2f2bc
--- /dev/null
+++ b/chrome/installer/mac/app/downloader.m
@@ -0,0 +1,103 @@
+// Copyright (c) 2016 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.
+
+#import <Foundation/Foundation.h>
+#import "downloader.h"
+
+@implementation Downloader
+
+@synthesize chromeDownloadURLs;
Mark Mentovai 2016/06/28 15:42:51 We synthesize things into instance variables with
+@synthesize chromeImageFilename;
+
+- (id)init {
+ if ((self = [super init])) {
+ chromeDownloadURLs = [[NSMutableArray alloc] init];
+ }
+ return self;
+}
+
+- (void)parseXML:(NSData*)omahaResponseXML {
+ NSData *response = omahaResponseXML;
+ NSXMLParser *parser = [[NSXMLParser alloc] initWithData:response];
+ [parser setDelegate:self];
+ bool success = [parser parse];
+ if (!success) {
+ NSError *err = [parser parserError];
+ NSLog(@"%@",err);
+ }
+}
+
+- (void)appendFilenameToURL {
+ int count = [chromeDownloadURLs count];
Mark Mentovai 2016/06/28 15:42:50 -[NSArray count] returns type NSUInteger, not int.
+ for (int i = 0; i < count; i++) {
Mark Mentovai 2016/06/28 15:42:51 But to just walk over a NSArray in Objective-C, yo
+ NSString *fullFilename = [[chromeDownloadURLs objectAtIndex:i]
+ stringByAppendingString: chromeImageFilename];
+ [chromeDownloadURLs replaceObjectAtIndex:i withObject: fullFilename];
+ }
+}
+
+// Method implementation for XMLParserDelegate.
+// Will search the XML data for the tag "url" and the subsequent "codebase" attribute
Mark Mentovai 2016/06/28 15:42:50 Watch the 80-column limit
+
+- (void)parser:(NSXMLParser *)parser
+didStartElement:(NSString *)elementName
+ namespaceURI:(NSString *)namespaceURI
+ qualifiedName:(NSString *)qName
+ attributes:(NSDictionary *)attributeDict {
+ if ([elementName isEqualToString:@"url"]) {
+ NSString *extractedURL = [attributeDict objectForKey:@"codebase"];
+ [chromeDownloadURLs addObject: extractedURL];
+ }
+ if ([elementName isEqualToString:@"package"]) {
+ chromeImageFilename = [attributeDict objectForKey:@"name"];
+ }
+}
+
+
+- (NSURL*)getChromeImageURL: (NSData*)chromeImageAsData {
+ [self parseXML:chromeImageAsData];
+ [self appendFilenameToURL];
Mark Mentovai 2016/06/28 15:42:50 If the parse failed, chromeImageFilename might not
+
+ NSArray *downloadLinks = [NSArray arrayWithArray:chromeDownloadURLs];
+ if(!downloadLinks || [downloadLinks count] < 1) {
+ NSLog(@"There were no download links found.");
+ return nil;
+ }
+ NSString *chromeURLString = [downloadLinks firstObject];
+
+ return [NSURL URLWithString: chromeURLString];
+}
+
+//TODO(ivan): make this not suck using [NSURLSession downloadTaskWithURL:] instead 👍.
Mark Mentovai 2016/06/28 15:42:51 I like the emoji!
+- (NSData*)downloadChromeAsData: (NSURL*)chromeURL {
+ return [NSData dataWithContentsOfURL:chromeURL];
+}
+
+- (NSString*)getDownloadsFilePath {
+ NSArray *downloadPaths = NSSearchPathForDirectoriesInDomains(
+ NSDownloadsDirectory, NSUserDomainMask, YES);
+ NSString *filePathToDownloads = [downloadPaths objectAtIndex:0];
+ NSArray *filenameComposition = @[filePathToDownloads, @"GoogleChrome.dmg"];
+ NSString *completeFilePath = [NSString pathWithComponents: filenameComposition];
+ return completeFilePath;
+}
+
+- (void)writeChromeImageToDownloadsDirectory: (NSData*)chromeImageAsData {
+ if (chromeImageAsData) {
+ NSString *filePath = [self getDownloadsFilePath];
+ [chromeImageAsData writeToFile:filePath atomically:YES];
Mark Mentovai 2016/06/28 15:42:50 What if it already exists, you overwrite it? We’l
+
+ NSLog(@"File was downloaded to %@.", filePath);
+ } else {
+ NSLog(@"Error downloading file.");
+ }
+}
+
+- (void)downloadChromeImageToDownloadsDirectory: (NSData*)responseXMLData {
+ NSURL *chromeURL = [self getChromeImageURL: responseXMLData];
+ NSData *chromeImageData = [self downloadChromeAsData: chromeURL];
+ [self writeChromeImageToDownloadsDirectory: chromeImageData];
+}
+
+@end

Powered by Google App Engine
This is Rietveld 408576698