support https, ws, wss builtin schemes to be intercepted

This commit is contained in:
deepak1556 2015-05-11 12:56:36 +05:30
parent 7fee639edf
commit 707503ac40
4 changed files with 37 additions and 4 deletions

View file

@ -61,7 +61,13 @@ net::URLRequestJobFactory* AtomBrowserContext::CreateURLRequestJobFactory(
BrowserThread::GetBlockingPool()->GetTaskRunnerWithShutdownBehavior( BrowserThread::GetBlockingPool()->GetTaskRunnerWithShutdownBehavior(
base::SequencedWorkerPool::SKIP_ON_SHUTDOWN))); base::SequencedWorkerPool::SKIP_ON_SHUTDOWN)));
job_factory->SetProtocolHandler( job_factory->SetProtocolHandler(
url::kHttpScheme, new HttpProtocolHandler()); url::kHttpScheme, new HttpProtocolHandler(url::kHttpScheme));
job_factory->SetProtocolHandler(
url::kHttpsScheme, new HttpProtocolHandler(url::kHttpsScheme));
job_factory->SetProtocolHandler(
url::kWsScheme, new HttpProtocolHandler(url::kWsScheme));
job_factory->SetProtocolHandler(
url::kWssScheme, new HttpProtocolHandler(url::kWssScheme));
// Set up interceptors in the reverse order. // Set up interceptors in the reverse order.
scoped_ptr<net::URLRequestJobFactory> top_job_factory = job_factory.Pass(); scoped_ptr<net::URLRequestJobFactory> top_job_factory = job_factory.Pass();

View file

@ -8,7 +8,8 @@
namespace atom { namespace atom {
HttpProtocolHandler::HttpProtocolHandler() { HttpProtocolHandler::HttpProtocolHandler(const std::string& scheme)
: scheme_(scheme) {
} }
HttpProtocolHandler::~HttpProtocolHandler() { HttpProtocolHandler::~HttpProtocolHandler() {
@ -19,7 +20,7 @@ net::URLRequestJob* HttpProtocolHandler::MaybeCreateJob(
net::NetworkDelegate* network_delegate) const { net::NetworkDelegate* network_delegate) const {
return net::URLRequestHttpJob::Factory(request, return net::URLRequestHttpJob::Factory(request,
network_delegate, network_delegate,
"http"); scheme_);
} }
} // namespace atom } // namespace atom

View file

@ -5,19 +5,24 @@
#ifndef ATOM_BROWSER_NET_HTTP_PROTOCOL_HANDLER_H_ #ifndef ATOM_BROWSER_NET_HTTP_PROTOCOL_HANDLER_H_
#define ATOM_BROWSER_NET_HTTP_PROTOCOL_HANDLER_H_ #define ATOM_BROWSER_NET_HTTP_PROTOCOL_HANDLER_H_
#include <string>
#include "net/url_request/url_request_job_factory.h" #include "net/url_request/url_request_job_factory.h"
namespace atom { namespace atom {
class HttpProtocolHandler : public net::URLRequestJobFactory::ProtocolHandler { class HttpProtocolHandler : public net::URLRequestJobFactory::ProtocolHandler {
public: public:
HttpProtocolHandler(); explicit HttpProtocolHandler(const std::string&);
virtual ~HttpProtocolHandler(); virtual ~HttpProtocolHandler();
// net::URLRequestJobFactory::ProtocolHandler: // net::URLRequestJobFactory::ProtocolHandler:
net::URLRequestJob* MaybeCreateJob( net::URLRequestJob* MaybeCreateJob(
net::URLRequest* request, net::URLRequest* request,
net::NetworkDelegate* network_delegate) const override; net::NetworkDelegate* network_delegate) const override;
private:
std::string scheme_;
}; };
} // namespace atom } // namespace atom

View file

@ -197,3 +197,24 @@ describe 'protocol module', ->
protocol.uninterceptProtocol 'http' protocol.uninterceptProtocol 'http'
done() done()
protocol.interceptProtocol 'http', handler protocol.interceptProtocol 'http', handler
it 'can override https protocol handler', (done) ->
handler = remote.createFunctionWithReturnValue 'valar morghulis'
protocol.once 'intercepted', ->
protocol.uninterceptProtocol 'https'
done()
protocol.interceptProtocol 'https', handler
it 'can override ws protocol handler', (done) ->
handler = remote.createFunctionWithReturnValue 'valar morghulis'
protocol.once 'intercepted', ->
protocol.uninterceptProtocol 'ws'
done()
protocol.interceptProtocol 'ws', handler
it 'can override wss protocol handler', (done) ->
handler = remote.createFunctionWithReturnValue 'valar morghulis'
protocol.once 'intercepted', ->
protocol.uninterceptProtocol 'wss'
done()
protocol.interceptProtocol 'wss', handler