/* Copyright 2020 The Brave Authors. All rights reserved. * This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this file, * You can obtain one at http://mozilla.org/MPL/2.0/. */ #include "brave/components/speedreader/speedreader_throttle.h" #include #include "brave/components/speedreader/speedreader_rewriter_service.h" #include "brave/components/speedreader/speedreader_url_loader.h" #include "mojo/public/cpp/bindings/pending_receiver.h" #include "mojo/public/cpp/bindings/pending_remote.h" #include "services/network/public/mojom/url_response_head.mojom.h" namespace speedreader { SpeedReaderThrottle::SpeedReaderThrottle( SpeedreaderRewriterService* rewriter_service, scoped_refptr task_runner) : rewriter_service_(rewriter_service), task_runner_(std::move(task_runner)) {} SpeedReaderThrottle::~SpeedReaderThrottle() = default; void SpeedReaderThrottle::WillProcessResponse( const GURL& response_url, network::mojom::URLResponseHead* response_head, bool* defer) { VLOG(2) << "Speedreader throttling: " << response_url; // Pause the response until Speedreader has done its job. *defer = true; mojo::PendingRemote new_remote; mojo::PendingReceiver new_receiver; mojo::PendingRemote source_loader; mojo::PendingReceiver source_client_receiver; SpeedReaderURLLoader* speedreader_loader; std::tie(new_remote, new_receiver, speedreader_loader) = SpeedReaderURLLoader::CreateLoader(weak_factory_.GetWeakPtr(), response_url, task_runner_, rewriter_service_); delegate_->InterceptResponse(std::move(new_remote), std::move(new_receiver), &source_loader, &source_client_receiver); speedreader_loader->Start(std::move(source_loader), std::move(source_client_receiver)); } void SpeedReaderThrottle::Resume() { delegate_->Resume(); } } // namespace speedreader