diff --git a/atom/browser/api/atom_api_app.cc b/atom/browser/api/atom_api_app.cc index 40f3f4c605da..571168627831 100644 --- a/atom/browser/api/atom_api_app.cc +++ b/atom/browser/api/atom_api_app.cc @@ -20,6 +20,7 @@ #include "atom/common/native_mate_converters/gurl_converter.h" #include "atom/common/native_mate_converters/image_converter.h" #include "atom/common/native_mate_converters/net_converter.h" +#include "atom/common/native_mate_converters/network_converter.h" #include "atom/common/native_mate_converters/value_converter.h" #include "atom/common/node_includes.h" #include "atom/common/options_switches.h" diff --git a/atom/browser/api/atom_api_web_contents.cc b/atom/browser/api/atom_api_web_contents.cc index 8f9c233c1848..1a2f33bd43d0 100644 --- a/atom/browser/api/atom_api_web_contents.cc +++ b/atom/browser/api/atom_api_web_contents.cc @@ -51,6 +51,7 @@ #include "atom/common/native_mate_converters/gurl_converter.h" #include "atom/common/native_mate_converters/image_converter.h" #include "atom/common/native_mate_converters/net_converter.h" +#include "atom/common/native_mate_converters/network_converter.h" #include "atom/common/native_mate_converters/string16_converter.h" #include "atom/common/native_mate_converters/value_converter.h" #include "atom/common/options_switches.h" diff --git a/atom/common/native_mate_converters/content_converter.cc b/atom/common/native_mate_converters/content_converter.cc index 7fff113a370d..3363a1632208 100644 --- a/atom/common/native_mate_converters/content_converter.cc +++ b/atom/common/native_mate_converters/content_converter.cc @@ -18,9 +18,6 @@ #include "content/public/browser/web_contents.h" #include "content/public/common/context_menu_params.h" #include "native_mate/dictionary.h" -#include "services/network/public/cpp/resource_request_body.h" - -using network::ResourceRequestBody; namespace { @@ -203,98 +200,6 @@ bool Converter::FromV8(v8::Isolate* isolate, return true; } -// static -v8::Local Converter>::ToV8( - v8::Isolate* isolate, - const scoped_refptr& val) { - if (!val) - return v8::Null(isolate); - auto list = std::make_unique(); - for (const auto& element : *(val->elements())) { - auto post_data_dict = std::make_unique(); - auto type = element.type(); - if (type == ResourceRequestBody::Element::TYPE_BYTES) { - std::unique_ptr bytes(base::Value::CreateWithCopiedBuffer( - element.bytes(), static_cast(element.length()))); - post_data_dict->SetString("type", "rawData"); - post_data_dict->Set("bytes", std::move(bytes)); - } else if (type == ResourceRequestBody::Element::TYPE_FILE) { - post_data_dict->SetString("type", "file"); - post_data_dict->SetKey("filePath", - base::Value(element.path().AsUTF8Unsafe())); - post_data_dict->SetInteger("offset", static_cast(element.offset())); - post_data_dict->SetInteger("length", static_cast(element.length())); - post_data_dict->SetDouble( - "modificationTime", element.expected_modification_time().ToDoubleT()); - } else if (type == ResourceRequestBody::Element::TYPE_FILE_FILESYSTEM) { - post_data_dict->SetString("type", "fileSystem"); - post_data_dict->SetKey("fileSystemURL", - base::Value(element.filesystem_url().spec())); - post_data_dict->SetInteger("offset", static_cast(element.offset())); - post_data_dict->SetInteger("length", static_cast(element.length())); - post_data_dict->SetDouble( - "modificationTime", element.expected_modification_time().ToDoubleT()); - } else if (type == ResourceRequestBody::Element::TYPE_BLOB) { - post_data_dict->SetString("type", "blob"); - post_data_dict->SetString("blobUUID", element.blob_uuid()); - } - list->Append(std::move(post_data_dict)); - } - return ConvertToV8(isolate, *list); -} - -// static -bool Converter>::FromV8( - v8::Isolate* isolate, - v8::Local val, - scoped_refptr* out) { - auto list = std::make_unique(); - if (!ConvertFromV8(isolate, val, list.get())) - return false; - *out = new network::ResourceRequestBody(); - for (size_t i = 0; i < list->GetSize(); ++i) { - base::DictionaryValue* dict = nullptr; - std::string type; - if (!list->GetDictionary(i, &dict)) - return false; - dict->GetString("type", &type); - if (type == "rawData") { - base::Value* bytes = nullptr; - dict->GetBinary("bytes", &bytes); - (*out)->AppendBytes(bytes->GetBlob().data(), bytes->GetBlob().size()); - } else if (type == "file") { - std::string file; - int offset = 0, length = -1; - double modification_time = 0.0; - dict->GetStringWithoutPathExpansion("filePath", &file); - dict->GetInteger("offset", &offset); - dict->GetInteger("file", &length); - dict->GetDouble("modificationTime", &modification_time); - (*out)->AppendFileRange(base::FilePath::FromUTF8Unsafe(file), - static_cast(offset), - static_cast(length), - base::Time::FromDoubleT(modification_time)); - } else if (type == "fileSystem") { - std::string file_system_url; - int offset = 0, length = -1; - double modification_time = 0.0; - dict->GetStringWithoutPathExpansion("fileSystemURL", &file_system_url); - dict->GetInteger("offset", &offset); - dict->GetInteger("file", &length); - dict->GetDouble("modificationTime", &modification_time); - (*out)->AppendFileSystemFileRange( - GURL(file_system_url), static_cast(offset), - static_cast(length), - base::Time::FromDoubleT(modification_time)); - } else if (type == "blob") { - std::string uuid; - dict->GetString("blobUUID", &uuid); - (*out)->AppendBlob(uuid); - } - } - return true; -} - // static v8::Local Converter::ToV8( v8::Isolate* isolate, diff --git a/atom/common/native_mate_converters/content_converter.h b/atom/common/native_mate_converters/content_converter.h index c5c9a2c74e81..18a2d5f1a7c8 100644 --- a/atom/common/native_mate_converters/content_converter.h +++ b/atom/common/native_mate_converters/content_converter.h @@ -19,10 +19,6 @@ struct ContextMenuParams; class WebContents; } // namespace content -namespace network { -class ResourceRequestBody; -} - using ContextMenuParamsWithWebContents = std::pair; @@ -53,16 +49,6 @@ struct Converter { const content::PermissionType& val); }; -template <> -struct Converter> { - static v8::Local ToV8( - v8::Isolate* isolate, - const scoped_refptr& val); - static bool FromV8(v8::Isolate* isolate, - v8::Local val, - scoped_refptr* out); -}; - template <> struct Converter { static bool FromV8(v8::Isolate* isolate, diff --git a/atom/common/native_mate_converters/network_converter.cc b/atom/common/native_mate_converters/network_converter.cc new file mode 100644 index 000000000000..1037e5f111fb --- /dev/null +++ b/atom/common/native_mate_converters/network_converter.cc @@ -0,0 +1,90 @@ +// Copyright (c) 2018 GitHub, Inc. +// Use of this source code is governed by the MIT license that can be +// found in the LICENSE file. + +#include "atom/common/native_mate_converters/network_converter.h" + +#include +#include + +#include "atom/common/native_mate_converters/value_converter.h" +#include "native_mate/dictionary.h" +#include "services/network/public/cpp/resource_request_body.h" + +namespace mate { + +// static +v8::Local +Converter>::ToV8( + v8::Isolate* isolate, + const scoped_refptr& val) { + if (!val) + return v8::Null(isolate); + std::unique_ptr list(new base::ListValue); + for (const auto& element : *(val->elements())) { + std::unique_ptr post_data_dict( + new base::DictionaryValue); + auto type = element.type(); + if (type == network::DataElement::TYPE_BYTES) { + std::unique_ptr bytes(base::Value::CreateWithCopiedBuffer( + element.bytes(), static_cast(element.length()))); + post_data_dict->SetString("type", "rawData"); + post_data_dict->Set("bytes", std::move(bytes)); + } else if (type == network::DataElement::TYPE_FILE) { + post_data_dict->SetString("type", "file"); + post_data_dict->SetKey("filePath", + base::Value(element.path().AsUTF8Unsafe())); + post_data_dict->SetInteger("offset", static_cast(element.offset())); + post_data_dict->SetInteger("length", static_cast(element.length())); + post_data_dict->SetDouble( + "modificationTime", element.expected_modification_time().ToDoubleT()); + } else if (type == network::DataElement::TYPE_BLOB) { + post_data_dict->SetString("type", "blob"); + post_data_dict->SetString("blobUUID", element.blob_uuid()); + } + list->Append(std::move(post_data_dict)); + } + return ConvertToV8(isolate, *list); +} + +// static +bool Converter>::FromV8( + v8::Isolate* isolate, + v8::Local val, + scoped_refptr* out) { + std::unique_ptr list(new base::ListValue); + if (!ConvertFromV8(isolate, val, list.get())) + return false; + *out = new network::ResourceRequestBody(); + for (size_t i = 0; i < list->GetSize(); ++i) { + base::DictionaryValue* dict = nullptr; + std::string type; + if (!list->GetDictionary(i, &dict)) + return false; + dict->GetString("type", &type); + if (type == "rawData") { + base::Value* bytes = nullptr; + dict->GetBinary("bytes", &bytes); + (*out)->AppendBytes(bytes->GetBlob().data(), bytes->GetBlob().size()); + } else if (type == "file") { + std::string file; + int offset = 0, length = -1; + double modification_time = 0.0; + dict->GetStringWithoutPathExpansion("filePath", &file); + dict->GetInteger("offset", &offset); + dict->GetInteger("file", &length); + dict->GetDouble("modificationTime", &modification_time); + (*out)->AppendFileRange(base::FilePath::FromUTF8Unsafe(file), + static_cast(offset), + static_cast(length), + base::Time::FromDoubleT(modification_time)); + } else if (type == "blob") { + std::string uuid; + dict->GetString("blobUUID", &uuid); + (*out)->AppendBlob(uuid); + } + } + return true; +} + +} // namespace mate diff --git a/atom/common/native_mate_converters/network_converter.h b/atom/common/native_mate_converters/network_converter.h new file mode 100644 index 000000000000..439ba19ec165 --- /dev/null +++ b/atom/common/native_mate_converters/network_converter.h @@ -0,0 +1,29 @@ +// Copyright (c) 2018 GitHub, Inc. +// Use of this source code is governed by the MIT license that can be +// found in the LICENSE file. + +#ifndef ATOM_COMMON_NATIVE_MATE_CONVERTERS_NETWORK_CONVERTER_H_ +#define ATOM_COMMON_NATIVE_MATE_CONVERTERS_NETWORK_CONVERTER_H_ + +#include "base/memory/scoped_refptr.h" +#include "native_mate/converter.h" + +namespace network { +class ResourceRequestBody; +} + +namespace mate { + +template <> +struct Converter> { + static v8::Local ToV8( + v8::Isolate* isolate, + const scoped_refptr& val); + static bool FromV8(v8::Isolate* isolate, + v8::Local val, + scoped_refptr* out); +}; + +} // namespace mate + +#endif // ATOM_COMMON_NATIVE_MATE_CONVERTERS_NETWORK_CONVERTER_H_ diff --git a/docs/api/browser-window.md b/docs/api/browser-window.md index 2de0e12d9c3a..f7a75fc94659 100644 --- a/docs/api/browser-window.md +++ b/docs/api/browser-window.md @@ -1153,7 +1153,7 @@ Same as `webContents.capturePage([rect, ]callback)`. * `httpReferrer` (String | [Referrer](structures/referrer.md)) (optional) - An HTTP Referrer url. * `userAgent` String (optional) - A user agent originating the request. * `extraHeaders` String (optional) - Extra headers separated by "\n" - * `postData` ([UploadRawData[]](structures/upload-raw-data.md) | [UploadFile[]](structures/upload-file.md) | [UploadFileSystem[]](structures/upload-file-system.md) | [UploadBlob[]](structures/upload-blob.md)) (optional) + * `postData` ([UploadRawData[]](structures/upload-raw-data.md) | [UploadFile[]](structures/upload-file.md) | [UploadBlob[]](structures/upload-blob.md)) (optional) * `baseURLForDataURL` String (optional) - Base url (with trailing path separator) for files to be loaded by the data url. This is needed only if the specified `url` is a data url and needs to load other files. Same as `webContents.loadURL(url[, options])`. diff --git a/docs/api/structures/upload-file-system.md b/docs/api/structures/upload-file-system.md deleted file mode 100644 index d7a1b28a03a9..000000000000 --- a/docs/api/structures/upload-file-system.md +++ /dev/null @@ -1,11 +0,0 @@ -# UploadFileSystem Object - -*(Deprecated)* - -* `type` String - `fileSystem`. -* `filsSystemURL` String - FileSystem url to read data for upload. -* `offset` Integer - Defaults to `0`. -* `length` Integer - Number of bytes to read from `offset`. - Defaults to `0`. -* `modificationTime` Double - Last Modification time in - number of seconds since the UNIX epoch. diff --git a/docs/api/web-contents.md b/docs/api/web-contents.md index 134384c71617..3dc21b35a92a 100644 --- a/docs/api/web-contents.md +++ b/docs/api/web-contents.md @@ -634,7 +634,7 @@ for windows with *offscreen rendering* enabled. * `httpReferrer` (String | [Referrer](structures/referrer.md)) (optional) - An HTTP Referrer url. * `userAgent` String (optional) - A user agent originating the request. * `extraHeaders` String (optional) - Extra headers separated by "\n". - * `postData` ([UploadRawData[]](structures/upload-raw-data.md) | [UploadFile[]](structures/upload-file.md) | [UploadFileSystem[]](structures/upload-file-system.md) | [UploadBlob[]](structures/upload-blob.md)) (optional) + * `postData` ([UploadRawData[]](structures/upload-raw-data.md) | [UploadFile[]](structures/upload-file.md) | [UploadBlob[]](structures/upload-blob.md)) (optional) * `baseURLForDataURL` String (optional) - Base url (with trailing path separator) for files to be loaded by the data url. This is needed only if the specified `url` is a data url and needs to load other files. Loads the `url` in the window. The `url` must contain the protocol prefix, diff --git a/docs/api/webview-tag.md b/docs/api/webview-tag.md index 271f723cf69c..25edb6052f75 100644 --- a/docs/api/webview-tag.md +++ b/docs/api/webview-tag.md @@ -309,7 +309,7 @@ webview.addEventListener('dom-ready', () => { * `httpReferrer` (String | [Referrer](structures/referrer.md)) (optional) - An HTTP Referrer url. * `userAgent` String (optional) - A user agent originating the request. * `extraHeaders` String (optional) - Extra headers separated by "\n" - * `postData` ([UploadRawData[]](structures/upload-raw-data.md) | [UploadFile[]](structures/upload-file.md) | [UploadFileSystem[]](structures/upload-file-system.md) | [UploadBlob[]](structures/upload-blob.md)) (optional) + * `postData` ([UploadRawData[]](structures/upload-raw-data.md) | [UploadFile[]](structures/upload-file.md) | [UploadBlob[]](structures/upload-blob.md)) (optional) * `baseURLForDataURL` String (optional) - Base url (with trailing path separator) for files to be loaded by the data url. This is needed only if the specified `url` is a data url and needs to load other files. Loads the `url` in the webview, the `url` must contain the protocol prefix, diff --git a/filenames.gypi b/filenames.gypi index 159d9c55f96b..19fb7492250f 100644 --- a/filenames.gypi +++ b/filenames.gypi @@ -499,6 +499,8 @@ 'atom/common/native_mate_converters/image_converter.h', 'atom/common/native_mate_converters/net_converter.cc', 'atom/common/native_mate_converters/net_converter.h', + 'atom/common/native_mate_converters/network_converter.cc', + 'atom/common/native_mate_converters/network_converter.h', 'atom/common/native_mate_converters/string16_converter.h', 'atom/common/native_mate_converters/ui_base_types_converter.h', 'atom/common/native_mate_converters/v8_value_converter.cc',