OLD | NEW |
---|---|
1 /* | 1 /* |
2 * Copyright 2015 The WebRTC Project Authors. All rights reserved. | 2 * Copyright 2015 The WebRTC Project Authors. All rights reserved. |
3 * | 3 * |
4 * Use of this source code is governed by a BSD-style license | 4 * Use of this source code is governed by a BSD-style license |
5 * that can be found in the LICENSE file in the root of the source | 5 * that can be found in the LICENSE file in the root of the source |
6 * tree. An additional intellectual property rights grant can be found | 6 * tree. An additional intellectual property rights grant can be found |
7 * in the file PATENTS. All contributing project authors may | 7 * in the file PATENTS. All contributing project authors may |
8 * be found in the AUTHORS file in the root of the source tree. | 8 * be found in the AUTHORS file in the root of the source tree. |
9 */ | 9 */ |
10 | 10 |
11 #if defined(WEBRTC_IOS) | 11 #if defined(WEBRTC_IOS) |
12 | 12 |
13 #if !defined(__has_feature) || !__has_feature(objc_arc) | 13 #if !defined(__has_feature) || !__has_feature(objc_arc) |
14 #error "This file requires ARC support." | 14 #error "This file requires ARC support." |
15 #endif | 15 #endif |
16 | 16 |
17 #import <Foundation/Foundation.h> | 17 #import <Foundation/Foundation.h> |
18 #include <string.h> | 18 #include <string.h> |
19 | 19 |
20 #include "webrtc/base/checks.h" | 20 #include "webrtc/base/checks.h" |
21 #include "webrtc/typedefs.h" | 21 #include "webrtc/typedefs.h" |
22 | 22 |
23 namespace webrtc { | 23 namespace webrtc { |
24 namespace test { | 24 namespace test { |
25 | 25 |
26 // TODO(henrika): move to shared location. | 26 // TODO(henrika): move to shared location. |
27 // See https://code.google.com/p/webrtc/issues/detail?id=4773 for details. | 27 // See https://code.google.com/p/webrtc/issues/detail?id=4773 for details. |
28 NSString* NSStringFromStdString(const std::string& stdString) { | 28 NSString* NSStringFromStdString(const std::string& stdString) { |
tkchin_webrtc
2016/09/27 11:01:47
fyi these should be eventually deleted and usage s
kthelgason
2016/09/27 11:10:31
Yes, I agree. I think there is a bug open for dele
| |
29 // std::string may contain null termination character so we construct | 29 // std::string may contain null termination character so we construct |
30 // using length. | 30 // using length. |
31 return [[NSString alloc] initWithBytes:stdString.data() | 31 return [[NSString alloc] initWithBytes:stdString.data() |
32 length:stdString.length() | 32 length:stdString.length() |
33 encoding:NSUTF8StringEncoding]; | 33 encoding:NSUTF8StringEncoding]; |
34 } | 34 } |
35 | 35 |
36 std::string StdStringFromNSString(NSString* nsString) { | 36 std::string StdStringFromNSString(NSString* nsString) { |
37 NSData* charData = [nsString dataUsingEncoding:NSUTF8StringEncoding]; | 37 NSData* charData = [nsString dataUsingEncoding:NSUTF8StringEncoding]; |
38 return std::string(reinterpret_cast<const char*>([charData bytes]), | 38 return std::string(reinterpret_cast<const char*>([charData bytes]), |
39 [charData length]); | 39 [charData length]); |
40 } | 40 } |
41 | 41 |
42 // For iOS, resource files are added to the application bundle in the root | 42 // For iOS, resource files are added to the application bundle in the root |
43 // and not in separate folders as is the case for other platforms. This method | 43 // and not in separate folders as is the case for other platforms. This method |
44 // therefore removes any prepended folders and uses only the actual file name. | 44 // therefore removes any prepended folders and uses only the actual file name. |
45 std::string IOSResourcePath(std::string name, std::string extension) { | 45 std::string IOSResourcePath(std::string name, std::string extension) { |
46 @autoreleasepool { | 46 @autoreleasepool { |
47 NSString* path = NSStringFromStdString(name); | 47 NSString* path = NSStringFromStdString(name); |
48 NSString* fileName = path.lastPathComponent; | 48 NSString* fileName = path.lastPathComponent; |
49 NSString* fileType = NSStringFromStdString(extension); | 49 NSString* fileType = NSStringFromStdString(extension); |
50 // Get full pathname for the resource identified by the name and extension. | 50 // Get full pathname for the resource identified by the name and extension. |
51 NSString* pathString = [[NSBundle mainBundle] pathForResource:fileName | 51 NSString* pathString = [[NSBundle mainBundle] pathForResource:fileName |
52 ofType:fileType]; | 52 ofType:fileType]; |
53 return StdStringFromNSString(pathString); | 53 return StdStringFromNSString(pathString); |
54 } | 54 } |
55 } | 55 } |
56 | 56 |
57 std::string IOSRootPath() { | |
58 @autoreleasepool { | |
59 NSBundle* mainBundle = [NSBundle mainBundle]; | |
60 return StdStringFromNSString(mainBundle.bundlePath) + "/"; | |
61 } | |
62 } | |
63 | |
57 // For iOS, we don't have access to the output directory. Return the path to the | 64 // For iOS, we don't have access to the output directory. Return the path to the |
58 // temporary directory instead. This is mostly used by tests that need to write | 65 // temporary directory instead. This is mostly used by tests that need to write |
59 // output files to disk. | 66 // output files to disk. |
60 std::string IOSOutputPath() { | 67 std::string IOSOutputPath() { |
61 @autoreleasepool { | 68 @autoreleasepool { |
62 NSString* tempDir = NSTemporaryDirectory(); | 69 NSString* tempDir = NSTemporaryDirectory(); |
63 if (tempDir == nil) | 70 if (tempDir == nil) |
64 tempDir = @"/tmp"; | 71 tempDir = @"/tmp"; |
65 return StdStringFromNSString(tempDir); | 72 return StdStringFromNSString(tempDir); |
66 } | 73 } |
67 } | 74 } |
68 | 75 |
69 } // namespace test | 76 } // namespace test |
70 } // namespace webrtc | 77 } // namespace webrtc |
71 | 78 |
72 #endif // defined(WEBRTC_IOS) | 79 #endif // defined(WEBRTC_IOS) |
OLD | NEW |