Implement protocol.unregisterProtocol

This commit is contained in:
Cheng Zhao 2015-08-13 19:26:18 +08:00
parent 777f99193f
commit 05fd81ebdc
2 changed files with 32 additions and 25 deletions

View file

@ -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.

View file

@ -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);