typedef std::map<std::string, v8::Persistent<v8::Function>> HandlersMap;
static HandlersMap g_handlers;
+static const char* kEarlyUseProtocolError = "This method can only be used"
+ "after the application has finished launching.";
+
// Emit an event for the protocol module.
void EmitEventInUI(const std::string& event, const std::string& parameter) {
v8::HandleScope scope;
net::URLRequest::IsHandledProtocol(scheme))
return node::ThrowError("The scheme is already registered");
+ if (AtomBrowserContext::Get()->url_request_context_getter() == NULL)
+ return node::ThrowError(kEarlyUseProtocolError);
+
// Store the handler in a map.
if (!args[1]->IsFunction())
return node::ThrowError("Handler must be a function");
v8::Handle<v8::Value> Protocol::UnregisterProtocol(const v8::Arguments& args) {
std::string scheme(*v8::String::Utf8Value(args[0]));
+ if (AtomBrowserContext::Get()->url_request_context_getter() == NULL)
+ return node::ThrowError(kEarlyUseProtocolError);
+
// Erase the handler from map.
HandlersMap::iterator it(g_handlers.find(scheme));
if (it == g_handlers.end())
if (ContainsKey(g_handlers, scheme))
return node::ThrowError("Cannot intercept custom procotols");
+ if (AtomBrowserContext::Get()->url_request_context_getter() == NULL)
+ return node::ThrowError(kEarlyUseProtocolError);
+
// Store the handler in a map.
if (!args[1]->IsFunction())
return node::ThrowError("Handler must be a function");
v8::Handle<v8::Value> Protocol::UninterceptProtocol(const v8::Arguments& args) {
std::string scheme(*v8::String::Utf8Value(args[0]));
+ if (AtomBrowserContext::Get()->url_request_context_getter() == NULL)
+ return node::ThrowError(kEarlyUseProtocolError);
+
// Erase the handler from map.
HandlersMap::iterator it(g_handlers.find(scheme));
if (it == g_handlers.end())