diff --git a/atom/common/native_mate_converters/net_converter.cc b/atom/common/native_mate_converters/net_converter.cc index be21ee3ee2a0..05c20ea6be28 100644 --- a/atom/common/native_mate_converters/net_converter.cc +++ b/atom/common/native_mate_converters/net_converter.cc @@ -165,6 +165,35 @@ v8::Local Converter::ToV8( return ConvertToV8(isolate, response_headers); } +bool Converter::FromV8( + v8::Isolate* isolate, + v8::Local val, + net::HttpResponseHeaders* out) { + if (!val->IsObject()) { + return false; + } + auto context = isolate->GetCurrentContext(); + auto headers = v8::Local::Cast(val); + auto keys = headers->GetOwnPropertyNames(); + for (uint32_t i = 0; i < keys->Length(); i++) { + v8::Local key, value; + if (!keys->Get(i)->ToString(context).ToLocal(&key)) { + return false; + } + if (!headers->Get(key)->ToString(context).ToLocal(&value)) { + return false; + } + v8::String::Utf8Value key_utf8(key); + v8::String::Utf8Value value_utf8(value); + std::string k(*key_utf8, key_utf8.length()); + std::string v(*value_utf8, value_utf8.length()); + std::ostringstream tmp; + tmp << k << ": " << v; + out->AddHeader(tmp.str()); + } + return true; +} + } // namespace mate namespace atom { diff --git a/atom/common/native_mate_converters/net_converter.h b/atom/common/native_mate_converters/net_converter.h index 9e3128fdb546..b73ae6ea980c 100644 --- a/atom/common/native_mate_converters/net_converter.h +++ b/atom/common/native_mate_converters/net_converter.h @@ -49,6 +49,9 @@ template <> struct Converter { static v8::Local ToV8(v8::Isolate* isolate, net::HttpResponseHeaders* headers); + static bool FromV8(v8::Isolate* isolate, + v8::Local val, + net::HttpResponseHeaders* out); }; } // namespace mate