Chromium Code Reviews| Index: testing/iossim/iossim.mm |
| diff --git a/testing/iossim/iossim.mm b/testing/iossim/iossim.mm |
| index 152f2bea4c74d43143aa805ceafa16d4059a899a..237e85742a305cf609f8cbdd13c81c58a6773844 100644 |
| --- a/testing/iossim/iossim.mm |
| +++ b/testing/iossim/iossim.mm |
| @@ -28,6 +28,19 @@ |
| @class DTiPhoneSimulatorSession; |
| @class DTiPhoneSimulatorSessionConfig; |
| @class DTiPhoneSimulatorSystemRoot; |
| +@class DVTiPhoneSimulatorMessenger; |
| + |
| +@interface DVTPlatform : NSObject |
| ++ (BOOL)loadAllPlatformsReturningError:(id *)arg1; |
|
lliabraa
2013/12/17 12:36:52
no space before *
justincohen
2013/12/17 14:49:29
Done.
|
| +@end |
| + |
| +@protocol OS_dispatch_source |
| +@end |
| +@protocol OS_dispatch_queue |
| +@end |
| +@class DVTDispatchLock; |
| +@class DVTConfinementServiceConnection; |
| +@class DVTTask; |
| @protocol DTiPhoneSimulatorSessionDelegate |
| - (void)session:(DTiPhoneSimulatorSession*)session |
| @@ -37,7 +50,7 @@ |
| withError:(NSError*)error; |
| @end |
| -#import "iPhoneSimulatorRemoteClient.h" |
| +#import "DVTiPhoneSimulatorRemoteClient.h" |
| // An undocumented system log key included in messages from launchd. The value |
| // is the PID of the process the message is about (as opposed to launchd's PID). |
| @@ -73,7 +86,9 @@ const NSTimeInterval kOutputPollIntervalSeconds = 0.1; |
| // The path within the developer dir of the private Simulator frameworks. |
| NSString* const kSimulatorFrameworkRelativePath = |
| @"Platforms/iPhoneSimulator.platform/Developer/Library/PrivateFrameworks/" |
| - @"iPhoneSimulatorRemoteClient.framework"; |
| + @"DVTiPhoneSimulatorRemoteClient.framework"; |
| +NSString* const kDVTFoundationRelativePath = |
| + @"../SharedFrameworks/DVTFoundation.framework"; |
| NSString* const kDevToolsFoundationRelativePath = |
| @"../OtherFrameworks/DevToolsFoundation.framework"; |
| NSString* const kSimulatorRelativePath = |
| @@ -300,9 +315,12 @@ void LogWarning(NSString* format, ...) { |
| aslmsg query = asl_new(ASL_TYPE_QUERY); |
| asl_set_query(query, ASL_KEY_SENDER, "launchd", |
| ASL_QUERY_OP_EQUAL | ASL_QUERY_OP_SUBSTRING); |
| - asl_set_query(query, ASL_KEY_REF_PID, |
| - [[[session simulatedApplicationPID] stringValue] UTF8String], |
| - ASL_QUERY_OP_EQUAL); |
| + char session_id[20]; |
| + if (snprintf(session_id, 20, "%d", [session simulatedApplicationPID]) < 0) { |
| + LogError(@"Failed to get [session simulatedApplicationPID]"); |
| + exit(kExitFailure); |
| + } |
| + asl_set_query(query, ASL_KEY_REF_PID, session_id, ASL_QUERY_OP_EQUAL); |
| asl_set_query(query, ASL_KEY_TIME, "-1m", ASL_QUERY_OP_GREATER_EQUAL); |
| // Log any messages found, and take note of any messages that may indicate |
| @@ -393,16 +411,43 @@ NSString* FindDeveloperDir() { |
| return output; |
| } |
| +// Helper to find a class by name and die if it isn't found. |
| +Class FindClassByName(NSString* nameOfClass) { |
| + Class theClass = NSClassFromString(nameOfClass); |
| + if (!theClass) { |
| + LogError(@"Failed to find class %@ at runtime.", nameOfClass); |
| + exit(kExitInitializationFailure); |
| + } |
| + return theClass; |
| +} |
| + |
| // Loads the Simulator framework from the given developer dir. |
| NSBundle* LoadSimulatorFramework(NSString* developerDir) { |
| // The Simulator framework depends on some of the other Xcode private |
| // frameworks; manually load them first so everything can be linked up. |
| + NSString* dvtFoundationPath = [developerDir |
| + stringByAppendingPathComponent:kDVTFoundationRelativePath]; |
| + NSBundle* dvtFoundationBundle = |
| + [NSBundle bundleWithPath:dvtFoundationPath]; |
| + if (![dvtFoundationBundle load]) |
| + return nil; |
| + |
| NSString* devToolsFoundationPath = [developerDir |
| stringByAppendingPathComponent:kDevToolsFoundationRelativePath]; |
| NSBundle* devToolsFoundationBundle = |
| [NSBundle bundleWithPath:devToolsFoundationPath]; |
| if (![devToolsFoundationBundle load]) |
| return nil; |
| + |
| + // Prime DVTPlatform. |
| + NSError* error; |
| + Class DVTPlatformClass = FindClassByName(@"DVTPlatform"); |
| + if (![DVTPlatformClass loadAllPlatformsReturningError:&error]) { |
| + LogError(@"Unable to loadAllPlatformsReturningError. Error: %@", |
| + [error localizedDescription]); |
| + return nil; |
| + } |
| + |
| NSString* simBundlePath = [developerDir |
| stringByAppendingPathComponent:kSimulatorFrameworkRelativePath]; |
| NSBundle* simBundle = [NSBundle bundleWithPath:simBundlePath]; |
| @@ -411,16 +456,6 @@ NSBundle* LoadSimulatorFramework(NSString* developerDir) { |
| return simBundle; |
| } |
| -// Helper to find a class by name and die if it isn't found. |
| -Class FindClassByName(NSString* nameOfClass) { |
| - Class theClass = NSClassFromString(nameOfClass); |
| - if (!theClass) { |
| - LogError(@"Failed to find class %@ at runtime.", nameOfClass); |
| - exit(kExitInitializationFailure); |
| - } |
| - return theClass; |
| -} |
| - |
| // Converts the given app path to an application spec, which requires an |
| // absolute path. |
| DTiPhoneSimulatorApplicationSpecifier* BuildAppSpec(NSString* appPath) { |
| @@ -454,7 +489,8 @@ DTiPhoneSimulatorSessionConfig* BuildSessionConfig( |
| NSString* stderrPath, |
| NSArray* appArgs, |
| NSDictionary* appEnv, |
| - NSNumber* deviceFamily) { |
| + NSNumber* deviceFamily, |
| + NSString* deviceName) { |
| Class sessionConfigClass = FindClassByName(@"DTiPhoneSimulatorSessionConfig"); |
| DTiPhoneSimulatorSessionConfig* sessionConfig = |
| [[[sessionConfigClass alloc] init] autorelease]; |
| @@ -465,6 +501,7 @@ DTiPhoneSimulatorSessionConfig* BuildSessionConfig( |
| sessionConfig.simulatedApplicationStdOutPath = stdoutPath; |
| sessionConfig.simulatedApplicationLaunchArgs = appArgs; |
| sessionConfig.simulatedApplicationLaunchEnvironment = appEnv; |
| + sessionConfig.simulatedDeviceInfoName = deviceName; |
| sessionConfig.simulatedDeviceFamily = deviceFamily; |
| return sessionConfig; |
| } |
| @@ -529,18 +566,10 @@ BOOL CreateHomeDirSubDirs(NSString* userHomePath) { |
| // path, then sets the path in the appropriate environment variable. |
| // Returns YES if successful, NO if unable to create or initialize the given |
| // directory. |
| -BOOL InitializeSimulatorUserHome(NSString* userHomePath, NSString* deviceName) { |
| +BOOL InitializeSimulatorUserHome(NSString* userHomePath) { |
| if (!CreateHomeDirSubDirs(userHomePath)) |
| return NO; |
| - // Set the device to simulate. Note that the iOS Simulator must not be running |
| - // for this setting to take effect. |
| - CFStringRef iPhoneSimulatorAppID = CFSTR("com.apple.iphonesimulator"); |
| - CFPreferencesSetAppValue(CFSTR("SimulateDevice"), |
| - deviceName, |
| - iPhoneSimulatorAppID); |
| - CFPreferencesAppSynchronize(iPhoneSimulatorAppID); |
| - |
| // Update the environment to use the specified directory as the user home |
| // directory. |
| // Note: the third param of setenv specifies whether or not to overwrite the |
| @@ -728,7 +757,7 @@ int main(int argc, char* const argv[]) { |
| exit(kExitInitializationFailure); |
| } |
| } |
| - if (!InitializeSimulatorUserHome(simHomePath, deviceName)) { |
| + if (!InitializeSimulatorUserHome(simHomePath)) { |
| LogError(@"Unable to initialize home directory for simulator: %@", |
| simHomePath); |
| exit(kExitInitializationFailure); |
| @@ -741,7 +770,8 @@ int main(int argc, char* const argv[]) { |
| stdioPath, |
| appArgs, |
| appEnv, |
| - deviceFamily); |
| + deviceFamily, |
| + deviceName); |
| SimulatorDelegate* delegate = |
| [[[SimulatorDelegate alloc] initWithStdioPath:stdioPath |
| developerDir:developerDir |