From 90cc10944a64d9a4998a3d12a2559baa7705b3af Mon Sep 17 00:00:00 2001 From: Charlie Hess Date: Mon, 2 May 2016 16:18:58 -0700 Subject: [PATCH] Use a DictionaryValue everywhere instead of a string map. --- atom/browser/api/atom_api_app.cc | 2 +- atom/browser/api/atom_api_app.h | 2 +- atom/browser/browser.cc | 3 +-- atom/browser/browser.h | 5 +++-- atom/browser/browser_mac.mm | 15 ++++----------- atom/browser/browser_observer.h | 4 +++- atom/browser/mac/atom_application_delegate.mm | 17 +++++------------ atom/browser/mac/mac_native_converter.h | 7 +++++-- atom/browser/mac/mac_native_converter.mm | 20 ++++++++++++++------ 9 files changed, 37 insertions(+), 38 deletions(-) diff --git a/atom/browser/api/atom_api_app.cc b/atom/browser/api/atom_api_app.cc index ec6cdce..ee73e5b 100644 --- a/atom/browser/api/atom_api_app.cc +++ b/atom/browser/api/atom_api_app.cc @@ -252,7 +252,7 @@ void App::OnFinishLaunching() { void App::OnContinueUserActivity(bool* prevent_default, const std::string& type, - const std::map& user_info) { + const base::DictionaryValue& user_info) { *prevent_default = Emit("continue-activity", type, user_info); } diff --git a/atom/browser/api/atom_api_app.h b/atom/browser/api/atom_api_app.h index 321230d..db51064 100644 --- a/atom/browser/api/atom_api_app.h +++ b/atom/browser/api/atom_api_app.h @@ -74,7 +74,7 @@ class App : public AtomBrowserClient::Delegate, void OnLogin(LoginHandler* login_handler) override; void OnContinueUserActivity(bool* prevent_default, const std::string& type, - const std::map& user_info) override; + const base::DictionaryValue& user_info) override; // content::ContentBrowserClient: void AllowCertificateError( diff --git a/atom/browser/browser.cc b/atom/browser/browser.cc index ee2a225..62e0467 100644 --- a/atom/browser/browser.cc +++ b/atom/browser/browser.cc @@ -139,8 +139,7 @@ void Browser::Activate(bool has_visible_windows) { #if defined(OS_MACOSX) bool Browser::ContinueUserActivity(const std::string& type, - const std::map& user_info) { + const base::DictionaryValue& user_info) { bool prevent_default = false; FOR_EACH_OBSERVER(BrowserObserver, observers_, diff --git a/atom/browser/browser.h b/atom/browser/browser.h index 14f94a0..4e282ed 100644 --- a/atom/browser/browser.h +++ b/atom/browser/browser.h @@ -10,6 +10,7 @@ #include #include "base/macros.h" +#include "base/values.h" #include "base/compiler_specific.h" #include "base/observer_list.h" #include "base/strings/string16.h" @@ -95,11 +96,11 @@ class Browser : public WindowListObserver { // Creates an activity and sets it as the one currently in use. void SetUserActivity(const std::string& type, - const std::map& user_info); + const base::DictionaryValue& user_info); // Resumes an activity via hand-off. bool ContinueUserActivity(const std::string& type, - const std::map& user_info); + const base::DictionaryValue& user_info); // Bounce the dock icon. enum BounceType { diff --git a/atom/browser/browser_mac.mm b/atom/browser/browser_mac.mm index a12bd8c..594624f 100644 --- a/atom/browser/browser_mac.mm +++ b/atom/browser/browser_mac.mm @@ -6,6 +6,7 @@ #include "atom/browser/mac/atom_application.h" #include "atom/browser/mac/atom_application_delegate.h" +#include "atom/browser/mac/mac_native_converter.h" #include "atom/browser/native_window.h" #include "atom/browser/window_list.h" #include "base/mac/bundle_locations.h" @@ -87,20 +88,12 @@ bool Browser::IsDefaultProtocolClient(const std::string& protocol) { void Browser::SetAppUserModelID(const base::string16& name) { } -void Browser::SetUserActivity(const std::string& type, const std::map& user_info) { +void Browser::SetUserActivity(const std::string& type, const base::DictionaryValue& user_info) { NSString* type_ns = [NSString stringWithUTF8String:type.c_str()]; NSUserActivity *user_activity = [[NSUserActivity alloc] initWithActivityType:type_ns]; + MacNativeConverter* converter = [[MacNativeConverter alloc] init]; - NSMutableArray* user_info_args = [[NSMutableArray alloc] init]; - for (auto const &pair : user_info) { - NSString* value_ns = [NSString stringWithUTF8String:pair.second.c_str()]; - NSString* key_ns = [NSString stringWithUTF8String:pair.first.c_str()]; - - [user_info_args addObject:value_ns]; - [user_info_args addObject:key_ns]; - } - - user_activity.userInfo = [[NSDictionary alloc] initWithObjectsAndKeys:user_info_args, nil]; + user_activity.userInfo = [converter dictionaryFromDictionaryValue:user_info]; [user_activity becomeCurrent]; } diff --git a/atom/browser/browser_observer.h b/atom/browser/browser_observer.h index 4ad0013..e297e16 100644 --- a/atom/browser/browser_observer.h +++ b/atom/browser/browser_observer.h @@ -8,6 +8,8 @@ #include #include +#include "base/values.h" + namespace atom { class LoginHandler; @@ -49,7 +51,7 @@ class BrowserObserver { // The browser wants to resume a user activity via handoff. (OS X only) virtual void OnContinueUserActivity(bool* prevent_default, const std::string& type, - const std::map& user_info) {} + const base::DictionaryValue& user_info) {} protected: virtual ~BrowserObserver() {} diff --git a/atom/browser/mac/atom_application_delegate.mm b/atom/browser/mac/atom_application_delegate.mm index f08cc84..ffb0b98 100644 --- a/atom/browser/mac/atom_application_delegate.mm +++ b/atom/browser/mac/atom_application_delegate.mm @@ -3,8 +3,9 @@ // found in the LICENSE file. #import "atom/browser/mac/atom_application_delegate.h" - #import "atom/browser/mac/atom_application.h" +#import "atom/browser/mac/mac_native_converter.h" + #include "atom/browser/browser.h" #include "base/strings/sys_string_conversions.h" @@ -64,19 +65,11 @@ 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) - { - NSString* value = [userActivity.userInfo objectForKey:key]; - std::string key_str(base::SysNSStringToUTF8(key)); - std::string value_str(base::SysNSStringToUTF8(value)); - user_info[key_str] = value_str; - } + MacNativeConverter* converter = [[MacNativeConverter alloc] init]; + const base::DictionaryValue* user_info = [converter dictionaryToDictionaryValue:userActivity.userInfo]; atom::Browser* browser = atom::Browser::Get(); - return browser->ContinueUserActivity(activity_type, user_info) ? YES : NO; + return browser->ContinueUserActivity(activity_type, *user_info) ? YES : NO; } @end diff --git a/atom/browser/mac/mac_native_converter.h b/atom/browser/mac/mac_native_converter.h index ac1a9a6..fcd1997 100644 --- a/atom/browser/mac/mac_native_converter.h +++ b/atom/browser/mac/mac_native_converter.h @@ -5,7 +5,10 @@ @interface MacNativeConverter : NSObject -- (base::ListValue*)arrayToV8:(NSArray*)nsArray; -- (base::DictionaryValue*)dictionaryToV8:(NSDictionary*)nsDictionary; +- (base::ListValue*)arrayToListValue:(NSArray*)nsArray; +- (base::DictionaryValue*)dictionaryToDictionaryValue:(NSDictionary*)nsDictionary; + +- (NSArray*)arrayFromListValue:(const base::ListValue&)list; +- (NSDictionary*)dictionaryFromDictionaryValue:(const base::DictionaryValue&)dict; @end diff --git a/atom/browser/mac/mac_native_converter.mm b/atom/browser/mac/mac_native_converter.mm index 6324403..202f3e0 100644 --- a/atom/browser/mac/mac_native_converter.mm +++ b/atom/browser/mac/mac_native_converter.mm @@ -2,14 +2,14 @@ @implementation MacNativeConverter -- (base::ListValue*)arrayToV8:(NSArray*)nsArray { +- (base::ListValue*)arrayToListValue:(NSArray*)nsArray { scoped_ptr list(new base::ListValue); for (id value in nsArray) { if ([value isKindOfClass:[NSArray class]]) { - list->Append([self arrayToV8:value]); + list->Append([self arrayToListValue:value]); } else if ([value isKindOfClass:[NSDictionary class]]) { - list->Append([self dictionaryToV8:value]); + list->Append([self dictionaryToDictionaryValue:value]); } else if ([value isKindOfClass:[NSString class]]) { list->AppendString(base::SysNSStringToUTF8(value)); } else if ([value isKindOfClass:[NSNumber class]]) { @@ -20,7 +20,7 @@ return list.get(); } -- (base::DictionaryValue*)dictionaryToV8:(NSDictionary*)nsDictionary { +- (base::DictionaryValue*)dictionaryToDictionaryValue:(NSDictionary*)nsDictionary { scoped_ptr dict(new base::DictionaryValue); NSEnumerator *it = [nsDictionary keyEnumerator]; @@ -30,9 +30,9 @@ std::string key_str(base::SysNSStringToUTF8(key)); if ([value isKindOfClass:[NSArray class]]) { - dict->Set(key_str, [self arrayToV8:value]); + dict->Set(key_str, [self arrayToListValue:value]); } else if ([value isKindOfClass:[NSDictionary class]]) { - dict->Set(key_str, [self dictionaryToV8:value]); + dict->Set(key_str, [self dictionaryToDictionaryValue:value]); } else if ([value isKindOfClass:[NSString class]]) { dict->SetString(key_str, base::SysNSStringToUTF8(value)); } else if ([value isKindOfClass:[NSNumber class]]) { @@ -43,4 +43,12 @@ return dict.get(); } +- (NSArray*)arrayFromListValue:(const base::ListValue&)list { + return [[NSArray alloc] init]; +} + +- (NSDictionary*)dictionaryFromDictionaryValue:(const base::DictionaryValue&)dict { + return [[NSDictionary alloc] init]; +} + @end -- 2.7.4