diff --git a/atom/browser/api/atom_api_protocol.cc b/atom/browser/api/atom_api_protocol.cc index 0d56a6fb1c..323d282b19 100644 --- a/atom/browser/api/atom_api_protocol.cc +++ b/atom/browser/api/atom_api_protocol.cc @@ -42,6 +42,14 @@ namespace { typedef net::URLRequestJobFactory::ProtocolHandler ProtocolHandler; +scoped_refptr BufferToRefCountedBytes( + v8::Local buf) { + scoped_refptr data(new base::RefCountedBytes); + auto start = reinterpret_cast(node::Buffer::Data(buf)); + data->data().assign(start, start + node::Buffer::Length(buf)); + return data; +} + class CustomProtocolRequestJob : public AdapterRequestJob { public: CustomProtocolRequestJob(Protocol* registry, @@ -95,7 +103,8 @@ class CustomProtocolRequestJob : public AdapterRequestJob { BrowserThread::PostTask(BrowserThread::IO, FROM_HERE, base::Bind(&AdapterRequestJob::CreateBufferJobAndStart, - GetWeakPtr(), mime_type, encoding, buffer->ToObject())); + GetWeakPtr(), mime_type, encoding, + BufferToRefCountedBytes(buffer))); return; } else if (name == "RequestFileJob") { base::FilePath path; diff --git a/atom/browser/net/adapter_request_job.cc b/atom/browser/net/adapter_request_job.cc index 8b562bcbf2..af3b02f150 100644 --- a/atom/browser/net/adapter_request_job.cc +++ b/atom/browser/net/adapter_request_job.cc @@ -71,8 +71,6 @@ base::WeakPtr AdapterRequestJob::GetWeakPtr() { } void AdapterRequestJob::CreateErrorJobAndStart(int error_code) { - DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::IO)); - real_job_ = new net::URLRequestErrorJob( request(), network_delegate(), error_code); real_job_->Start(); @@ -81,25 +79,21 @@ void AdapterRequestJob::CreateErrorJobAndStart(int error_code) { void AdapterRequestJob::CreateStringJobAndStart(const std::string& mime_type, const std::string& charset, const std::string& data) { - DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::IO)); - real_job_ = new URLRequestStringJob( request(), network_delegate(), mime_type, charset, data); real_job_->Start(); } -void AdapterRequestJob::CreateBufferJobAndStart(const std::string& mime_type, - const std::string& charset, - v8::Local buffer) { - DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::IO)); - +void AdapterRequestJob::CreateBufferJobAndStart( + const std::string& mime_type, + const std::string& charset, + scoped_refptr data) { real_job_ = new URLRequestBufferJob( - request(), network_delegate(), mime_type, charset, buffer); + request(), network_delegate(), mime_type, charset, data); real_job_->Start(); } void AdapterRequestJob::CreateFileJobAndStart(const base::FilePath& path) { - DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::IO)); real_job_ = asar::CreateJobFromPath( path, request(), @@ -111,8 +105,6 @@ void AdapterRequestJob::CreateFileJobAndStart(const base::FilePath& path) { } void AdapterRequestJob::CreateJobFromProtocolHandlerAndStart() { - DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::IO)); - DCHECK(protocol_handler_); real_job_ = protocol_handler_->MaybeCreateJob(request(), network_delegate()); if (!real_job_.get()) diff --git a/atom/browser/net/adapter_request_job.h b/atom/browser/net/adapter_request_job.h index 406214e3c1..d87207464c 100644 --- a/atom/browser/net/adapter_request_job.h +++ b/atom/browser/net/adapter_request_job.h @@ -7,6 +7,7 @@ #include +#include "base/memory/ref_counted_memory.h" #include "base/memory/weak_ptr.h" #include "net/url_request/url_request_job.h" #include "net/url_request/url_request_job_factory.h" @@ -53,7 +54,7 @@ class AdapterRequestJob : public net::URLRequestJob { const std::string& data); void CreateBufferJobAndStart(const std::string& mime_type, const std::string& charset, - v8::Local buffer); + scoped_refptr data); void CreateFileJobAndStart(const base::FilePath& path); void CreateJobFromProtocolHandlerAndStart(); diff --git a/atom/browser/net/url_request_buffer_job.cc b/atom/browser/net/url_request_buffer_job.cc index 4aeb3284a4..a8233b88da 100644 --- a/atom/browser/net/url_request_buffer_job.cc +++ b/atom/browser/net/url_request_buffer_job.cc @@ -10,18 +10,16 @@ namespace atom { -URLRequestBufferJob::URLRequestBufferJob(net::URLRequest* request, - net::NetworkDelegate* network_delegate, - const std::string& mime_type, - const std::string& charset, - v8::Local data) +URLRequestBufferJob::URLRequestBufferJob( + net::URLRequest* request, + net::NetworkDelegate* network_delegate, + const std::string& mime_type, + const std::string& charset, + scoped_refptr data) : net::URLRequestSimpleJob(request, network_delegate), mime_type_(mime_type), charset_(charset), - buffer_data_(new base::RefCountedBytes()) { - auto input = reinterpret_cast(node::Buffer::Data(data)); - size_t length = node::Buffer::Length(data); - buffer_data_->data().assign(input, input + length); + buffer_data_(data) { } int URLRequestBufferJob::GetRefCountedData( diff --git a/atom/browser/net/url_request_buffer_job.h b/atom/browser/net/url_request_buffer_job.h index 936d964094..cbdfbfa10d 100644 --- a/atom/browser/net/url_request_buffer_job.h +++ b/atom/browser/net/url_request_buffer_job.h @@ -19,7 +19,7 @@ class URLRequestBufferJob : public net::URLRequestSimpleJob { net::NetworkDelegate* network_delegate, const std::string& mime_type, const std::string& charset, - v8::Local buffer); + scoped_refptr data); // URLRequestSimpleJob: int GetRefCountedData(std::string* mime_type, diff --git a/vendor/native_mate b/vendor/native_mate index 269be86998..1696237a3f 160000 --- a/vendor/native_mate +++ b/vendor/native_mate @@ -1 +1 @@ -Subproject commit 269be869988bda9a7e8ad0ef56af178a741af09c +Subproject commit 1696237a3f444f0e33a8947749b4d70f6feb511b