void SystemPreferences::SetUserDefault()

in shell/browser/api/electron_api_system_preferences_mac.mm [304:372]


void SystemPreferences::SetUserDefault(const std::string& name,
                                       const std::string& type,
                                       gin::Arguments* args) {
  NSUserDefaults* defaults = [NSUserDefaults standardUserDefaults];
  NSString* key = base::SysUTF8ToNSString(name);
  if (type == "string") {
    std::string value;
    if (args->GetNext(&value)) {
      [defaults setObject:base::SysUTF8ToNSString(value) forKey:key];
      return;
    }
  } else if (type == "boolean") {
    bool value;
    v8::Local<v8::Value> next = args->PeekNext();
    if (!next.IsEmpty() && next->IsBoolean() && args->GetNext(&value)) {
      [defaults setBool:value forKey:key];
      return;
    }
  } else if (type == "float") {
    float value;
    if (args->GetNext(&value)) {
      [defaults setFloat:value forKey:key];
      return;
    }
  } else if (type == "integer") {
    int value;
    if (args->GetNext(&value)) {
      [defaults setInteger:value forKey:key];
      return;
    }
  } else if (type == "double") {
    double value;
    if (args->GetNext(&value)) {
      [defaults setDouble:value forKey:key];
      return;
    }
  } else if (type == "url") {
    GURL value;
    if (args->GetNext(&value)) {
      if (NSURL* url = net::NSURLWithGURL(value)) {
        [defaults setURL:url forKey:key];
        return;
      }
    }
  } else if (type == "array") {
    base::ListValue value;
    if (args->GetNext(&value)) {
      if (NSArray* array = ListValueToNSArray(value)) {
        [defaults setObject:array forKey:key];
        return;
      }
    }
  } else if (type == "dictionary") {
    base::DictionaryValue value;
    if (args->GetNext(&value)) {
      if (NSDictionary* dict = DictionaryValueToNSDictionary(value)) {
        [defaults setObject:dict forKey:key];
        return;
      }
    }
  } else {
    gin_helper::ErrorThrower(args->isolate())
        .ThrowTypeError("Invalid type: " + type);
    return;
  }

  gin_helper::ErrorThrower(args->isolate())
      .ThrowTypeError("Unable to convert value to: " + type);
}