diff --git a/atom/browser/mac/atom_application_delegate.mm b/atom/browser/mac/atom_application_delegate.mm index 33aa47ce2402..f08cc84c4661 100644 --- a/atom/browser/mac/atom_application_delegate.mm +++ b/atom/browser/mac/atom_application_delegate.mm @@ -63,9 +63,9 @@ continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void (^)(NSArray *restorableObjects))restorationHandler { std::string activity_type(base::SysNSStringToUTF8(userActivity.activityType)); - + std::map user_info; - + NSArray* keys = [userActivity.userInfo allKeys]; for (NSString* key in keys) { diff --git a/atom/browser/mac/mac_native_converter.h b/atom/browser/mac/mac_native_converter.h new file mode 100644 index 000000000000..ac1a9a608d70 --- /dev/null +++ b/atom/browser/mac/mac_native_converter.h @@ -0,0 +1,11 @@ +#import + +#include "base/values.h" +#include "base/strings/sys_string_conversions.h" + +@interface MacNativeConverter : NSObject + +- (base::ListValue*)arrayToV8:(NSArray*)nsArray; +- (base::DictionaryValue*)dictionaryToV8:(NSDictionary*)nsDictionary; + +@end diff --git a/atom/browser/mac/mac_native_converter.mm b/atom/browser/mac/mac_native_converter.mm new file mode 100644 index 000000000000..632440360178 --- /dev/null +++ b/atom/browser/mac/mac_native_converter.mm @@ -0,0 +1,46 @@ +#import "atom/browser/mac/mac_native_converter.h" + +@implementation MacNativeConverter + +- (base::ListValue*)arrayToV8:(NSArray*)nsArray { + scoped_ptr list(new base::ListValue); + + for (id value in nsArray) { + if ([value isKindOfClass:[NSArray class]]) { + list->Append([self arrayToV8:value]); + } else if ([value isKindOfClass:[NSDictionary class]]) { + list->Append([self dictionaryToV8:value]); + } else if ([value isKindOfClass:[NSString class]]) { + list->AppendString(base::SysNSStringToUTF8(value)); + } else if ([value isKindOfClass:[NSNumber class]]) { + list->AppendInteger(((NSNumber* )value).intValue); + } + } + + return list.get(); +} + +- (base::DictionaryValue*)dictionaryToV8:(NSDictionary*)nsDictionary { + scoped_ptr dict(new base::DictionaryValue); + + NSEnumerator *it = [nsDictionary keyEnumerator]; + while (NSString *key = [it nextObject]) { + id value = [nsDictionary objectForKey:key]; + + std::string key_str(base::SysNSStringToUTF8(key)); + + if ([value isKindOfClass:[NSArray class]]) { + dict->Set(key_str, [self arrayToV8:value]); + } else if ([value isKindOfClass:[NSDictionary class]]) { + dict->Set(key_str, [self dictionaryToV8:value]); + } else if ([value isKindOfClass:[NSString class]]) { + dict->SetString(key_str, base::SysNSStringToUTF8(value)); + } else if ([value isKindOfClass:[NSNumber class]]) { + dict->SetInteger(key_str, ((NSNumber* )value).intValue); + } + } + + return dict.get(); +} + +@end diff --git a/filenames.gypi b/filenames.gypi index 783b5cb33d04..033d4959454e 100644 --- a/filenames.gypi +++ b/filenames.gypi @@ -183,6 +183,8 @@ 'atom/browser/mac/atom_application.mm', 'atom/browser/mac/atom_application_delegate.h', 'atom/browser/mac/atom_application_delegate.mm', + 'atom/browser/mac/mac_native_converter.h', + 'atom/browser/mac/mac_native_converter.mm', 'atom/browser/native_window.cc', 'atom/browser/native_window.h', 'atom/browser/native_window_views_win.cc',