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

Side by Side Diff: base/strings/sys_string_conversions_mac.mm

Issue 2656903005: ChromeDriver: Handle key events properly on Mac (Closed)
Patch Set: changes Created 3 years, 10 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 unified diff | Download patch
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "base/strings/sys_string_conversions.h" 5 #include "base/strings/sys_string_conversions.h"
6 6
7 #import <Foundation/Foundation.h> 7 #import <Foundation/Foundation.h>
8 #include <stddef.h> 8 #include <stddef.h>
9 9
10 #include <vector> 10 #include <vector>
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after
86 in_encoding, 86 in_encoding,
87 false, 87 false,
88 kCFAllocatorNull)); 88 kCFAllocatorNull));
89 if (!cfstring) 89 if (!cfstring)
90 return OutStringType(); 90 return OutStringType();
91 91
92 return CFStringToSTLStringWithEncodingT<OutStringType>(cfstring, 92 return CFStringToSTLStringWithEncodingT<OutStringType>(cfstring,
93 out_encoding); 93 out_encoding);
94 } 94 }
95 95
96 // Given an STL string |in| with an encoding specified by |in_encoding|, 96 // Given an STL string |in| and length of string |in_length| with an
97 // return it as a CFStringRef. Returns NULL on failure. 97 // encoding specified by |in_encoding|, return it as a CFStringRef.
98 template<typename StringType> 98 // Returns NULL on failure.
99 template <typename StringType>
99 static CFStringRef STLStringToCFStringWithEncodingsT( 100 static CFStringRef STLStringToCFStringWithEncodingsT(
100 const StringType& in, 101 const StringType& in,
102 typename StringType::size_type in_length,
101 CFStringEncoding in_encoding) { 103 CFStringEncoding in_encoding) {
102 typename StringType::size_type in_length = in.length();
103 if (in_length == 0) 104 if (in_length == 0)
104 return CFSTR(""); 105 return CFSTR("");
105 106
106 return CFStringCreateWithBytes(kCFAllocatorDefault, 107 return CFStringCreateWithBytes(kCFAllocatorDefault,
107 reinterpret_cast<const UInt8*>(in.data()), 108 reinterpret_cast<const UInt8*>(in.data()),
108 in_length * 109 in_length *
109 sizeof(typename StringType::value_type), 110 sizeof(typename StringType::value_type),
110 in_encoding, 111 in_encoding,
111 false); 112 false);
112 } 113 }
113 114
115 // Given an STL string |in| with an encoding specified by |in_encoding|,
116 // return it as a CFStringRef. Returns NULL on failure.
117 template <typename StringType>
118 static CFStringRef STLStringToCFStringWithEncodingsT(
119 const StringType& in,
120 CFStringEncoding in_encoding) {
121 return STLStringToCFStringWithEncodingsT(in, in.length(), in_encoding);
122 }
123
114 // Specify the byte ordering explicitly, otherwise CFString will be confused 124 // Specify the byte ordering explicitly, otherwise CFString will be confused
115 // when strings don't carry BOMs, as they typically won't. 125 // when strings don't carry BOMs, as they typically won't.
116 static const CFStringEncoding kNarrowStringEncoding = kCFStringEncodingUTF8; 126 static const CFStringEncoding kNarrowStringEncoding = kCFStringEncodingUTF8;
117 #ifdef __BIG_ENDIAN__ 127 #ifdef __BIG_ENDIAN__
118 static const CFStringEncoding kMediumStringEncoding = kCFStringEncodingUTF16BE; 128 static const CFStringEncoding kMediumStringEncoding = kCFStringEncodingUTF16BE;
119 static const CFStringEncoding kWideStringEncoding = kCFStringEncodingUTF32BE; 129 static const CFStringEncoding kWideStringEncoding = kCFStringEncodingUTF32BE;
120 #elif defined(__LITTLE_ENDIAN__) 130 #elif defined(__LITTLE_ENDIAN__)
121 static const CFStringEncoding kMediumStringEncoding = kCFStringEncodingUTF16LE; 131 static const CFStringEncoding kMediumStringEncoding = kCFStringEncodingUTF16LE;
122 static const CFStringEncoding kWideStringEncoding = kCFStringEncodingUTF32LE; 132 static const CFStringEncoding kWideStringEncoding = kCFStringEncodingUTF32LE;
123 #endif // __LITTLE_ENDIAN__ 133 #endif // __LITTLE_ENDIAN__
(...skipping 21 matching lines...) Expand all
145 } 155 }
146 156
147 CFStringRef SysUTF8ToCFStringRef(const std::string& utf8) { 157 CFStringRef SysUTF8ToCFStringRef(const std::string& utf8) {
148 return STLStringToCFStringWithEncodingsT(utf8, kNarrowStringEncoding); 158 return STLStringToCFStringWithEncodingsT(utf8, kNarrowStringEncoding);
149 } 159 }
150 160
151 CFStringRef SysUTF16ToCFStringRef(const string16& utf16) { 161 CFStringRef SysUTF16ToCFStringRef(const string16& utf16) {
152 return STLStringToCFStringWithEncodingsT(utf16, kMediumStringEncoding); 162 return STLStringToCFStringWithEncodingsT(utf16, kMediumStringEncoding);
153 } 163 }
154 164
165 CFStringRef SysUTF16ToCFStringRef(const string16& utf16, int string_length) {
166 return STLStringToCFStringWithEncodingsT(utf16, string_length,
167 kMediumStringEncoding);
168 }
169
155 NSString* SysUTF8ToNSString(const std::string& utf8) { 170 NSString* SysUTF8ToNSString(const std::string& utf8) {
156 return (NSString*)base::mac::CFTypeRefToNSObjectAutorelease( 171 return (NSString*)base::mac::CFTypeRefToNSObjectAutorelease(
157 SysUTF8ToCFStringRef(utf8)); 172 SysUTF8ToCFStringRef(utf8));
158 } 173 }
159 174
160 NSString* SysUTF16ToNSString(const string16& utf16) { 175 NSString* SysUTF16ToNSString(const string16& utf16) {
161 return (NSString*)base::mac::CFTypeRefToNSObjectAutorelease( 176 return (NSString*)base::mac::CFTypeRefToNSObjectAutorelease(
162 SysUTF16ToCFStringRef(utf16)); 177 SysUTF16ToCFStringRef(utf16));
163 } 178 }
164 179
180 NSString* SysUTF16ToNSString(const string16& utf16, int string_length) {
181 return (NSString*)base::mac::CFTypeRefToNSObjectAutorelease(
182 SysUTF16ToCFStringRef(utf16, string_length));
183 }
184
165 std::string SysCFStringRefToUTF8(CFStringRef ref) { 185 std::string SysCFStringRefToUTF8(CFStringRef ref) {
166 return CFStringToSTLStringWithEncodingT<std::string>(ref, 186 return CFStringToSTLStringWithEncodingT<std::string>(ref,
167 kNarrowStringEncoding); 187 kNarrowStringEncoding);
168 } 188 }
169 189
170 string16 SysCFStringRefToUTF16(CFStringRef ref) { 190 string16 SysCFStringRefToUTF16(CFStringRef ref) {
171 return CFStringToSTLStringWithEncodingT<string16>(ref, 191 return CFStringToSTLStringWithEncodingT<string16>(ref,
172 kMediumStringEncoding); 192 kMediumStringEncoding);
173 } 193 }
174 194
175 std::string SysNSStringToUTF8(NSString* nsstring) { 195 std::string SysNSStringToUTF8(NSString* nsstring) {
176 if (!nsstring) 196 if (!nsstring)
177 return std::string(); 197 return std::string();
178 return SysCFStringRefToUTF8(reinterpret_cast<CFStringRef>(nsstring)); 198 return SysCFStringRefToUTF8(reinterpret_cast<CFStringRef>(nsstring));
179 } 199 }
180 200
181 string16 SysNSStringToUTF16(NSString* nsstring) { 201 string16 SysNSStringToUTF16(NSString* nsstring) {
182 if (!nsstring) 202 if (!nsstring)
183 return string16(); 203 return string16();
184 return SysCFStringRefToUTF16(reinterpret_cast<CFStringRef>(nsstring)); 204 return SysCFStringRefToUTF16(reinterpret_cast<CFStringRef>(nsstring));
185 } 205 }
186 206
187 } // namespace base 207 } // namespace base
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698