Implement protocol.unregisterProtocol
This commit is contained in:
parent
777f99193f
commit
05fd81ebdc
2 changed files with 32 additions and 25 deletions
|
@ -49,13 +49,14 @@ mate::ObjectTemplateBuilder Protocol::GetObjectTemplateBuilder(
|
||||||
return mate::ObjectTemplateBuilder(isolate)
|
return mate::ObjectTemplateBuilder(isolate)
|
||||||
.SetMethod("registerStandardSchemes", &Protocol::RegisterStandardSchemes)
|
.SetMethod("registerStandardSchemes", &Protocol::RegisterStandardSchemes)
|
||||||
.SetMethod("registerStringProtocol",
|
.SetMethod("registerStringProtocol",
|
||||||
&Protocol::JavaScriptRegisterProtocol<URLRequestStringJob>)
|
&Protocol::RegisterProtocol<URLRequestStringJob>)
|
||||||
.SetMethod("registerBufferProtocol",
|
.SetMethod("registerBufferProtocol",
|
||||||
&Protocol::JavaScriptRegisterProtocol<URLRequestBufferJob>)
|
&Protocol::RegisterProtocol<URLRequestBufferJob>)
|
||||||
.SetMethod("registerFileProtocol",
|
.SetMethod("registerFileProtocol",
|
||||||
&Protocol::JavaScriptRegisterProtocol<UrlRequestAsyncAsarJob>)
|
&Protocol::RegisterProtocol<UrlRequestAsyncAsarJob>)
|
||||||
.SetMethod("registerHttpProtocol",
|
.SetMethod("registerHttpProtocol",
|
||||||
&Protocol::JavaScriptRegisterProtocol<URLRequestFetchJob>);
|
&Protocol::RegisterProtocol<URLRequestFetchJob>)
|
||||||
|
.SetMethod("unregisterProtocol", &Protocol::UnregisterProtocol);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Protocol::RegisterStandardSchemes(
|
void Protocol::RegisterStandardSchemes(
|
||||||
|
@ -63,6 +64,26 @@ void Protocol::RegisterStandardSchemes(
|
||||||
atom::AtomBrowserClient::SetCustomSchemes(schemes);
|
atom::AtomBrowserClient::SetCustomSchemes(schemes);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Protocol::UnregisterProtocol(
|
||||||
|
const std::string& scheme, mate::Arguments* args) {
|
||||||
|
CompletionCallback callback;
|
||||||
|
args->GetNext(&callback);
|
||||||
|
content::BrowserThread::PostTaskAndReplyWithResult(
|
||||||
|
content::BrowserThread::IO, FROM_HERE,
|
||||||
|
base::Bind(&Protocol::UnregisterProtocolInIO,
|
||||||
|
base::Unretained(this), scheme),
|
||||||
|
base::Bind(&Protocol::OnIOCompleted,
|
||||||
|
base::Unretained(this), callback));
|
||||||
|
}
|
||||||
|
|
||||||
|
Protocol::ProtocolError Protocol::UnregisterProtocolInIO(
|
||||||
|
const std::string& scheme) {
|
||||||
|
if (!job_factory_->HasProtocolHandler(scheme))
|
||||||
|
return PROTOCOL_NOT_REGISTERED;
|
||||||
|
job_factory_->SetProtocolHandler(scheme, nullptr);
|
||||||
|
return PROTOCOL_OK;
|
||||||
|
}
|
||||||
|
|
||||||
void Protocol::OnIOCompleted(
|
void Protocol::OnIOCompleted(
|
||||||
const CompletionCallback& callback, ProtocolError error) {
|
const CompletionCallback& callback, ProtocolError error) {
|
||||||
// The completion callback is optional.
|
// The completion callback is optional.
|
||||||
|
|
|
@ -92,10 +92,11 @@ class Protocol : public mate::Wrappable {
|
||||||
|
|
||||||
// Register the protocol with certain request job.
|
// Register the protocol with certain request job.
|
||||||
template<typename RequestJob>
|
template<typename RequestJob>
|
||||||
void RegisterProtocol(v8::Isolate* isolate,
|
void RegisterProtocol(const std::string& scheme,
|
||||||
const std::string& scheme,
|
|
||||||
const Handler& handler,
|
const Handler& handler,
|
||||||
const CompletionCallback& callback) {
|
mate::Arguments* args) {
|
||||||
|
CompletionCallback callback;
|
||||||
|
args->GetNext(&callback);
|
||||||
content::BrowserThread::PostTaskAndReplyWithResult(
|
content::BrowserThread::PostTaskAndReplyWithResult(
|
||||||
content::BrowserThread::IO, FROM_HERE,
|
content::BrowserThread::IO, FROM_HERE,
|
||||||
base::Bind(&Protocol::RegisterProtocolInIO<RequestJob>,
|
base::Bind(&Protocol::RegisterProtocolInIO<RequestJob>,
|
||||||
|
@ -117,24 +118,9 @@ class Protocol : public mate::Wrappable {
|
||||||
return PROTOCOL_FAIL;
|
return PROTOCOL_FAIL;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Parse optional parameters for registerProtocol.
|
// Unregistered the protocol handler that handles |scheme|.
|
||||||
template<typename RequestJob>
|
void UnregisterProtocol(const std::string& scheme, mate::Arguments* args);
|
||||||
void JavaScriptRegisterProtocol(v8::Isolate* isolate,
|
ProtocolError UnregisterProtocolInIO(const std::string& scheme);
|
||||||
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<RequestJob>(isolate, scheme, handler, callback);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Convert error code to JS exception and call the callback.
|
// Convert error code to JS exception and call the callback.
|
||||||
void OnIOCompleted(const CompletionCallback& callback, ProtocolError error);
|
void OnIOCompleted(const CompletionCallback& callback, ProtocolError error);
|
||||||
|
|
Loading…
Reference in a new issue