ServiceWorker: Make Extension WebRequestAPI aware of service worker update check script requests

https://chromium-review.googlesource.com/c/chromium/src/+/1782230
This commit is contained in:
deepak1556
2019-09-09 17:45:21 -07:00
parent a768ad210d
commit 615d33517a
3 changed files with 19 additions and 5 deletions

View File

@@ -1000,7 +1000,7 @@ bool AtomBrowserClient::WillCreateURLLoaderFactory(
new ProxyingURLLoaderFactory(
web_request.get(), protocol->intercept_handlers(), render_process_id,
std::move(proxied_receiver), std::move(target_factory_info),
std::move(header_client_receiver));
std::move(header_client_receiver), type);
if (bypass_redirect_checks)
*bypass_redirect_checks = true;

View File

@@ -77,7 +77,8 @@ void ProxyingURLLoaderFactory::InProgressRequest::UpdateRequestInfo() {
info_.emplace(extensions::WebRequestInfoInitParams(
request_id_, factory_->render_process_id_, request_.render_frame_id,
nullptr, routing_id_, request_for_info, false,
!(options_ & network::mojom::kURLLoadOptionSynchronous)));
!(options_ & network::mojom::kURLLoadOptionSynchronous),
factory_->IsForServiceWorkerScript()));
current_request_uses_header_client_ =
factory_->url_loader_header_client_receiver_.is_bound() &&
@@ -654,10 +655,12 @@ ProxyingURLLoaderFactory::ProxyingURLLoaderFactory(
network::mojom::URLLoaderFactoryRequest loader_request,
network::mojom::URLLoaderFactoryPtrInfo target_factory_info,
mojo::PendingReceiver<network::mojom::TrustedURLLoaderHeaderClient>
header_client_receiver)
header_client_receiver,
content::ContentBrowserClient::URLLoaderFactoryType loader_factory_type)
: web_request_api_(web_request_api),
intercepted_handlers_(intercepted_handlers),
render_process_id_(render_process_id) {
render_process_id_(render_process_id),
loader_factory_type_(loader_factory_type) {
target_factory_.Bind(std::move(target_factory_info));
target_factory_.set_connection_error_handler(base::BindOnce(
&ProxyingURLLoaderFactory::OnTargetFactoryError, base::Unretained(this)));
@@ -740,6 +743,11 @@ void ProxyingURLLoaderFactory::OnLoaderCreated(
request_it->second->OnLoaderCreated(std::move(receiver));
}
bool ProxyingURLLoaderFactory::IsForServiceWorkerScript() const {
return loader_factory_type_ == content::ContentBrowserClient::
URLLoaderFactoryType::kServiceWorkerScript;
}
void ProxyingURLLoaderFactory::OnTargetFactoryError() {
target_factory_.reset();
proxy_bindings_.CloseAllBindings();

View File

@@ -12,6 +12,7 @@
#include <vector>
#include "base/optional.h"
#include "content/public/browser/content_browser_client.h"
#include "extensions/browser/api/web_request/web_request_info.h"
#include "mojo/public/cpp/bindings/receiver.h"
#include "services/network/public/cpp/resource_request.h"
@@ -204,7 +205,8 @@ class ProxyingURLLoaderFactory
network::mojom::URLLoaderFactoryRequest loader_request,
network::mojom::URLLoaderFactoryPtrInfo target_factory_info,
mojo::PendingReceiver<network::mojom::TrustedURLLoaderHeaderClient>
header_client_receiver);
header_client_receiver,
content::ContentBrowserClient::URLLoaderFactoryType loader_factory_type);
~ProxyingURLLoaderFactory() override;
// network::mojom::URLLoaderFactory:
@@ -226,6 +228,8 @@ class ProxyingURLLoaderFactory
WebRequestAPI* web_request_api() { return web_request_api_; }
bool IsForServiceWorkerScript() const;
private:
void OnTargetFactoryError();
void OnProxyBindingError();
@@ -249,6 +253,8 @@ class ProxyingURLLoaderFactory
network::mojom::URLLoaderFactoryPtr target_factory_;
mojo::Receiver<network::mojom::TrustedURLLoaderHeaderClient>
url_loader_header_client_receiver_{this};
const content::ContentBrowserClient::URLLoaderFactoryType
loader_factory_type_;
// Mapping from our own internally generated request ID to an
// InProgressRequest instance.