Skip to content

Commit

Permalink
refactor: use URLLoaderNetworkServiceObserver for auth requests from …
Browse files Browse the repository at this point in the history
…SimpleURLLoader
  • Loading branch information
deepak1556 authored and MarshallOfSound committed Apr 12, 2021
1 parent a1f0bbb commit 186528a
Show file tree
Hide file tree
Showing 6 changed files with 61 additions and 243 deletions.
1 change: 0 additions & 1 deletion patches/chromium/.patches
Expand Up @@ -102,7 +102,6 @@ fix_setparentacessibile_crash_win.patch
fix_export_zlib_symbols.patch
don_t_use_potentially_null_getwebframe_-_view_when_get_blink.patch
web_contents.patch
add_trustedauthclient_to_urlloaderfactory.patch
fix_route_mouse_event_navigations_through_the_web_contents_delegate.patch
disable_unload_metrics.patch
fix_add_check_for_sandbox_then_result.patch
Expand Down
162 changes: 0 additions & 162 deletions patches/chromium/add_trustedauthclient_to_urlloaderfactory.patch

This file was deleted.

45 changes: 21 additions & 24 deletions shell/browser/api/electron_api_url_loader.cc
Expand Up @@ -11,7 +11,6 @@
#include <utility>
#include <vector>

#include "base/containers/id_map.h"
#include "base/no_destructor.h"
#include "gin/handle.h"
#include "gin/object_template_builder.h"
Expand Down Expand Up @@ -260,12 +259,6 @@ const net::NetworkTrafficAnnotationTag kTrafficAnnotation =
setting: "This feature cannot be disabled."
})");

base::IDMap<SimpleURLLoaderWrapper*>& GetAllRequests() {
static base::NoDestructor<base::IDMap<SimpleURLLoaderWrapper*>>
s_all_requests;
return *s_all_requests;
}

} // namespace

gin::WrapperInfo SimpleURLLoaderWrapper::kWrapperInfo = {
Expand All @@ -274,12 +267,16 @@ gin::WrapperInfo SimpleURLLoaderWrapper::kWrapperInfo = {
SimpleURLLoaderWrapper::SimpleURLLoaderWrapper(
std::unique_ptr<network::ResourceRequest> request,
network::mojom::URLLoaderFactory* url_loader_factory,
int options)
: id_(GetAllRequests().Add(this)) {
// We slightly abuse the |render_frame_id| field in ResourceRequest so that
// we can correlate any authentication events that arrive with this request.
request->render_frame_id = id_;

int options) {
if (!request->trusted_params)
request->trusted_params = network::ResourceRequest::TrustedParams();
mojo::PendingRemote<network::mojom::URLLoaderNetworkServiceObserver>
url_loader_network_observer_remote;
url_loader_network_observer_receivers_.Add(
this,
url_loader_network_observer_remote.InitWithNewPipeAndPassReceiver());
request->trusted_params->url_loader_network_observer =
std::move(url_loader_network_observer_remote);
// SimpleURLLoader wants to control the request body itself. We have other
// ideas.
auto request_body = std::move(request->request_body);
Expand Down Expand Up @@ -316,21 +313,15 @@ void SimpleURLLoaderWrapper::PinBodyGetter(v8::Local<v8::Value> body_getter) {
body_getter);
}

SimpleURLLoaderWrapper::~SimpleURLLoaderWrapper() {
GetAllRequests().Remove(id_);
}

// static
SimpleURLLoaderWrapper* SimpleURLLoaderWrapper::FromID(uint32_t id) {
DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
return GetAllRequests().Lookup(id);
}
SimpleURLLoaderWrapper::~SimpleURLLoaderWrapper() = default;

void SimpleURLLoaderWrapper::OnAuthRequired(
const base::Optional<base::UnguessableToken>& window_id,
uint32_t request_id,
const GURL& url,
bool first_auth_attempt,
net::AuthChallengeInfo auth_info,
network::mojom::URLResponseHeadPtr head,
const net::AuthChallengeInfo& auth_info,
const scoped_refptr<net::HttpResponseHeaders>& head_headers,
mojo::PendingRemote<network::mojom::AuthChallengeResponder>
auth_challenge_responder) {
DCHECK_CURRENTLY_ON(content::BrowserThread::UI);
Expand All @@ -356,6 +347,12 @@ void SimpleURLLoaderWrapper::OnAuthRequired(
Emit("login", auth_info, base::AdaptCallbackForRepeating(std::move(cb)));
}

void SimpleURLLoaderWrapper::Clone(
mojo::PendingReceiver<network::mojom::URLLoaderNetworkServiceObserver>
observer) {
url_loader_network_observer_receivers_.Add(this, std::move(observer));
}

void SimpleURLLoaderWrapper::Cancel() {
loader_.reset();
pinned_wrapper_.Reset();
Expand Down
51 changes: 39 additions & 12 deletions shell/browser/api/electron_api_url_loader.h
Expand Up @@ -11,10 +11,12 @@

#include "base/memory/weak_ptr.h"
#include "gin/wrappable.h"
#include "mojo/public/cpp/bindings/receiver_set.h"
#include "net/base/auth.h"
#include "services/network/public/cpp/simple_url_loader_stream_consumer.h"
#include "services/network/public/mojom/network_context.mojom.h"
#include "services/network/public/mojom/url_loader_factory.mojom-forward.h"
#include "services/network/public/mojom/url_loader_network_service_observer.mojom.h"
#include "services/network/public/mojom/url_response_head.mojom.h"
#include "shell/browser/event_emitter_mixin.h"
#include "url/gurl.h"
Expand All @@ -39,21 +41,12 @@ namespace api {
class SimpleURLLoaderWrapper
: public gin::Wrappable<SimpleURLLoaderWrapper>,
public gin_helper::EventEmitterMixin<SimpleURLLoaderWrapper>,
public network::SimpleURLLoaderStreamConsumer {
public network::SimpleURLLoaderStreamConsumer,
public network::mojom::URLLoaderNetworkServiceObserver {
public:
~SimpleURLLoaderWrapper() override;
static gin::Handle<SimpleURLLoaderWrapper> Create(gin::Arguments* args);

static SimpleURLLoaderWrapper* FromID(uint32_t id);

void OnAuthRequired(
const GURL& url,
bool first_auth_attempt,
net::AuthChallengeInfo auth_info,
network::mojom::URLResponseHeadPtr head,
mojo::PendingRemote<network::mojom::AuthChallengeResponder>
auth_challenge_responder);

void Cancel();

// gin::Wrappable
Expand All @@ -73,6 +66,39 @@ class SimpleURLLoaderWrapper
void OnComplete(bool success) override;
void OnRetry(base::OnceClosure start_retry) override;

// network::mojom::URLLoaderNetworkServiceObserver:
void OnAuthRequired(
const base::Optional<base::UnguessableToken>& window_id,
uint32_t request_id,
const GURL& url,
bool first_auth_attempt,
const net::AuthChallengeInfo& auth_info,
const scoped_refptr<net::HttpResponseHeaders>& head_headers,
mojo::PendingRemote<network::mojom::AuthChallengeResponder>
auth_challenge_responder) override;
void OnSSLCertificateError(const GURL& url,
int net_error,
const net::SSLInfo& ssl_info,
bool fatal,
OnSSLCertificateErrorCallback response) override {}
void OnCertificateRequested(
const base::Optional<base::UnguessableToken>& window_id,
const scoped_refptr<net::SSLCertRequestInfo>& cert_info,
mojo::PendingRemote<network::mojom::ClientCertificateResponder>
client_cert_responder) override {}
void OnClearSiteData(const GURL& url,
const std::string& header_value,
int32_t load_flags,
OnClearSiteDataCallback callback) override {}
void OnLoadingStateUpdate(network::mojom::LoadInfoPtr info,
OnLoadingStateUpdateCallback callback) override {}
void OnDataUseUpdate(int32_t network_traffic_annotation_id_hash,
int64_t recv_bytes,
int64_t sent_bytes) override {}
void Clone(
mojo::PendingReceiver<network::mojom::URLLoaderNetworkServiceObserver>
listener) override;

// SimpleURLLoader callbacks
void OnResponseStarted(const GURL& final_url,
const network::mojom::URLResponseHead& response_head);
Expand All @@ -86,11 +112,12 @@ class SimpleURLLoaderWrapper
void Pin();
void PinBodyGetter(v8::Local<v8::Value>);

uint32_t id_;
std::unique_ptr<network::SimpleURLLoader> loader_;
v8::Global<v8::Value> pinned_wrapper_;
v8::Global<v8::Value> pinned_chunk_pipe_getter_;

mojo::ReceiverSet<network::mojom::URLLoaderNetworkServiceObserver>
url_loader_network_observer_receivers_;
base::WeakPtrFactory<SimpleURLLoaderWrapper> weak_factory_{this};
};

Expand Down

0 comments on commit 186528a

Please sign in to comment.