fix: crash in webRequest due to unsafe static_cast

upstream was changed to wrap the network delegate

see https://chromium.googlesource.com/chromium/src/+/69.0.3497.106/services/network/network_context.cc#948
This commit is contained in:
Jeremy Apthorp 2018-10-08 15:04:45 -07:00
parent e548ed1a6e
commit a71755e1b6
3 changed files with 9 additions and 5 deletions

View file

@ -49,11 +49,9 @@ void CallNetworkDelegateMethod(
URLPatterns patterns,
Listener listener) {
// Force creating network delegate.
net::URLRequestContext* context =
url_request_context_getter->GetURLRequestContext();
url_request_context_getter->GetURLRequestContext();
// Then call the method.
AtomNetworkDelegate* network_delegate =
static_cast<AtomNetworkDelegate*>(context->network_delegate());
auto* network_delegate = url_request_context_getter->network_delegate();
(network_delegate->*method)(type, std::move(patterns), std::move(listener));
}

View file

@ -313,7 +313,9 @@ net::URLRequestContext* URLRequestContextGetter::GetURLRequestContext() {
if (!url_request_context_) {
std::unique_ptr<network::URLRequestContextBuilderMojo> builder =
std::make_unique<network::URLRequestContextBuilderMojo>();
builder->set_network_delegate(std::make_unique<AtomNetworkDelegate>());
auto network_delegate = std::make_unique<AtomNetworkDelegate>();
network_delegate_ = network_delegate.get();
builder->set_network_delegate(std::move(network_delegate));
ct_delegate_.reset(new brightray::RequireCTDelegate);
auto cert_verifier = std::make_unique<AtomCertVerifier>(ct_delegate_.get());

View file

@ -26,6 +26,7 @@ class RequireCTDelegate;
namespace atom {
class AtomBrowserContext;
class AtomNetworkDelegate;
class AtomURLRequestJobFactory;
class ResourceContext;
@ -44,6 +45,8 @@ class URLRequestContextGetter : public net::URLRequestContextGetter {
return top_job_factory_.get();
}
AtomNetworkDelegate* network_delegate() const { return network_delegate_; }
private:
friend class AtomBrowserContext;
@ -99,6 +102,7 @@ class URLRequestContextGetter : public net::URLRequestContextGetter {
URLRequestContextGetter::Handle* context_handle_;
net::URLRequestContext* url_request_context_;
AtomNetworkDelegate* network_delegate_;
content::ProtocolHandlerMap protocol_handlers_;
content::URLRequestInterceptorScopedVector protocol_interceptors_;
bool context_shutting_down_;