diff --git a/atom/browser/api/atom_api_protocol.cc b/atom/browser/api/atom_api_protocol.cc index c0c2e5b512..b7a4971a37 100644 --- a/atom/browser/api/atom_api_protocol.cc +++ b/atom/browser/api/atom_api_protocol.cc @@ -49,13 +49,13 @@ mate::ObjectTemplateBuilder Protocol::GetObjectTemplateBuilder( return mate::ObjectTemplateBuilder(isolate) .SetMethod("registerStandardSchemes", &Protocol::RegisterStandardSchemes) .SetMethod("registerStringProtocol", - &Protocol::RegisterProtocol) + &Protocol::JavaScriptRegisterProtocol) .SetMethod("registerBufferProtocol", - &Protocol::RegisterProtocol) + &Protocol::JavaScriptRegisterProtocol) .SetMethod("registerFileProtocol", - &Protocol::RegisterProtocol) + &Protocol::JavaScriptRegisterProtocol) .SetMethod("registerHttpProtocol", - &Protocol::RegisterProtocol); + &Protocol::JavaScriptRegisterProtocol); } void Protocol::RegisterStandardSchemes( @@ -65,6 +65,10 @@ void Protocol::RegisterStandardSchemes( void Protocol::OnIOCompleted( const CompletionCallback& callback, ProtocolError error) { + // The completion callback is optional. + if (callback.is_null()) + return; + v8::Locker locker(isolate()); v8::HandleScope handle_scope(isolate()); diff --git a/atom/browser/api/atom_api_protocol.h b/atom/browser/api/atom_api_protocol.h index 54dac9b13b..233ee00a29 100644 --- a/atom/browser/api/atom_api_protocol.h +++ b/atom/browser/api/atom_api_protocol.h @@ -12,6 +12,8 @@ #include "atom/browser/net/atom_url_request_job_factory.h" #include "base/callback.h" #include "content/public/browser/browser_thread.h" +#include "native_mate/arguments.h" +#include "native_mate/dictionary.h" #include "native_mate/handle.h" #include "native_mate/wrappable.h" @@ -106,6 +108,25 @@ class Protocol : public mate::Wrappable { return PROTOCOL_FAIL; } + // Parse optional parameters for registerProtocol. + template + void JavaScriptRegisterProtocol(v8::Isolate* isolate, + const std::string& scheme, + mate::Arguments* args) { + // protocol.registerProtocol(scheme[, options], handler[, callback]); + mate::Dictionary options = mate::Dictionary::CreateEmpty(isolate); + Handler handler; + CompletionCallback callback; + args->GetNext(&options); + if (!args->GetNext(&handler)) { + args->ThrowError(); + return; + } + args->GetNext(&callback); + + RegisterProtocol(isolate, scheme, handler, callback); + } + // Convert error code to JS exception and call the callback. void OnIOCompleted(const CompletionCallback& callback, ProtocolError error); diff --git a/atom/browser/net/asar/url_request_asar_job.cc b/atom/browser/net/asar/url_request_asar_job.cc index 33cb04c9ed..de019f6d94 100644 --- a/atom/browser/net/asar/url_request_asar_job.cc +++ b/atom/browser/net/asar/url_request_asar_job.cc @@ -5,6 +5,7 @@ #include "atom/browser/net/asar/url_request_asar_job.h" #include +#include #include "base/bind.h" #include "base/files/file_util.h" diff --git a/atom/browser/net/js_asker.cc b/atom/browser/net/js_asker.cc index aa6192b057..bbaf093eb2 100644 --- a/atom/browser/net/js_asker.cc +++ b/atom/browser/net/js_asker.cc @@ -4,6 +4,8 @@ #include "atom/browser/net/js_asker.h" +#include + #include "atom/common/native_mate_converters/callback.h" #include "atom/common/native_mate_converters/v8_value_converter.h" #include "native_mate/function_template.h" diff --git a/atom/browser/net/url_request_string_job.h b/atom/browser/net/url_request_string_job.h index 7a2e23acab..87b9181352 100644 --- a/atom/browser/net/url_request_string_job.h +++ b/atom/browser/net/url_request_string_job.h @@ -5,11 +5,11 @@ #ifndef ATOM_BROWSER_NET_URL_REQUEST_STRING_JOB_H_ #define ATOM_BROWSER_NET_URL_REQUEST_STRING_JOB_H_ +#include + #include "atom/browser/net/js_asker.h" #include "net/url_request/url_request_simple_job.h" -#include - namespace atom { class URLRequestStringJob : public JsAsker { diff --git a/vendor/native_mate b/vendor/native_mate index 67d9eaa215..24d31e2046 160000 --- a/vendor/native_mate +++ b/vendor/native_mate @@ -1 +1 @@ -Subproject commit 67d9eaa215e8727d86dc7b1f7a10be8699848f1f +Subproject commit 24d31e204698bafc65c50295167764fbb0f28bc0