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

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

Issue 2094583004: Initial commit for Chrome metainstaller on Mac. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: 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/request.m
diff --git a/chrome/installer/mac/app/request.m b/chrome/installer/mac/app/request.m
new file mode 100644
index 0000000000000000000000000000000000000000..d51ab55bcd08ce08dfba7e992059afb23a3e1d8c
--- /dev/null
+++ b/chrome/installer/mac/app/request.m
@@ -0,0 +1,129 @@
+// 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.
+
+#if !defined(__x86_64__)
+#error "What are you doing?"
+#endif
+
+#import <Foundation/Foundation.h>
+#include "request.h"
+
+const NSString *omahaEndpoint = @"https://tools.google.com/service/update2";
Elly Fong-Jones 2016/06/24 17:26:02 this can be local to the function where it's used
+static NSData *payload;
Elly Fong-Jones 2016/06/24 17:26:02 having a global for this value (which is only set
+
+NSString* getArchitecture(void) {
+ const NXArchInfo *arch = NXGetLocalArchInfo();
+ NSString *archName = [NSString stringWithUTF8String:arch->name];
+ return archName;
+}
+
+NSString *getOSVersion(void) {
+ NSString *versionString = [[NSProcessInfo processInfo]
+ operatingSystemVersionString];
+ NSString *versionNumber = [[versionString componentsSeparatedByString:@" "]
+ objectAtIndex:1];
+ return versionNumber;
+}
+
+NSXMLDocument *createXMLRequestBody(NSString *operatingSystem /* important */,
+ NSString *architecture) {
+ NSString *protocol = @"3.0";
+ NSString *keystoneVersion = @"KeystoneAgent-1.99.4.0";
+
+ NSString *platform = @"mac"; //important
+ NSString *plat_arch = [NSString stringWithFormat:@"%@_%@", operatingSystem,
+ architecture];
+
+ NSString *appid = @"com.google.Chrome"; //important
Elly Fong-Jones 2016/06/24 17:26:02 important how? are the other variables unimportant
+ NSString *version = @"0.0.0.0"; //important
+ NSString *language = @"en-us";
+
+ NSXMLElement *root = [[NSXMLElement alloc] initWithName:@"request"];
+ [root addAttribute:[NSXMLNode attributeWithName:@"protocol"
+ stringValue:protocol]];
+ [root addAttribute:[NSXMLNode attributeWithName:@"version"
+ stringValue:keystoneVersion]];
+
+ NSXMLElement *osChild = [[NSXMLElement alloc] initWithName:@"os"];
+ [osChild addAttribute:[NSXMLNode attributeWithName:@"platform"
+ stringValue:platform]];
+ [osChild addAttribute:[NSXMLNode attributeWithName:@"version"
+ stringValue:operatingSystem]];
+ [osChild addAttribute:[NSXMLNode attributeWithName:@"arch"
+ stringValue:architecture]];
+ [osChild addAttribute:[NSXMLNode attributeWithName:@"sp"
+ stringValue:plat_arch]];
+ [root addChild:osChild];
+
+ NSXMLElement *appChild = [[NSXMLElement alloc] initWithName:@"app"];
+ [appChild addAttribute:[NSXMLNode attributeWithName:@"appid"
+ stringValue:appid]];
+ [appChild addAttribute:[NSXMLNode attributeWithName:@"version"
+ stringValue:version]];
+ [appChild addAttribute:[NSXMLNode attributeWithName:@"lang"
+ stringValue:language]];
+ [root addChild:appChild];
+
+ NSXMLElement *updateChildChild = [[NSXMLElement alloc]
+ initWithName:@"updatecheck"];
+ [appChild addChild:updateChildChild];
+
+ NSXMLDocument *requestXMLDocument = [[NSXMLDocument alloc]
+ initWithRootElement:root];
+ return requestXMLDocument;
+}
+
+NSURLRequest* createOmahaRequest(NSXMLDocument *requestXMLBody) {
+ // create request
+ NSURL *requestURL = [NSURL URLWithString:(NSString*)omahaEndpoint];
+ NSMutableURLRequest *request = [NSMutableURLRequest
+ requestWithURL:requestURL];
+
+ // populate metadata
+ request.HTTPMethod = @"POST";
+ [request addValue:@"text/xml" forHTTPHeaderField:@"Content-Type"];
+
+ // populate xml body
+ NSData *requestBody = [[requestXMLBody XMLString]
+ dataUsingEncoding:NSUTF8StringEncoding];
+ request.HTTPBody = requestBody;
+
+ return request;
+}
+
+NSData* sendRequestAndReceiveResponse(NSURLRequest *request) {
+ NSURLSessionConfiguration *sessionConfig = [NSURLSessionConfiguration
+ defaultSessionConfiguration];
+ NSURLSession *session = [NSURLSession sessionWithConfiguration:sessionConfig
+ delegate:nil
+ delegateQueue:nil];
+
+ NSURLSessionDataTask *omahaDataTask = [session dataTaskWithRequest:request
+ completionHandler:^(NSData *_Nullable data,
+ NSURLResponse *_Nullable response,
+ NSError *_Nullable error) {
+ if(error) {
+ NSLog(@"%@", error);
+ return;
+ }
+
+ NSHTTPURLResponse *HTTPResponse = (NSHTTPURLResponse *)response;
+ if(HTTPResponse.statusCode == 200) {
+ payload = [[NSData alloc] initWithData:data];
+ } else {
+ NSLog(@"HTTP response: %ld", (unsigned long)HTTPResponse.statusCode);
+ return;
+ }
+
+ return;
+ }];
+
+ [omahaDataTask resume];
+ [session finishTasksAndInvalidate];
+ while([omahaDataTask state] != NSURLSessionTaskStateCompleted) {
+ sleep(1);
Elly Fong-Jones 2016/06/24 17:26:02 This will hang the UI for the entire app (inside t
+ }
+
+ return [payload autorelease];
+}

Powered by Google App Engine
This is Rietveld 408576698