// Copyright 2018 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #include "android_webview/renderer/aw_url_loader_throttle_provider.h" #include #include "base/feature_list.h" #include "base/memory/ptr_util.h" #include "components/safe_browsing/content/renderer/renderer_url_loader_throttle.h" #include "components/safe_browsing/core/common/features.h" #include "content/public/common/content_features.h" #include "content/public/renderer/render_thread.h" #include "third_party/blink/public/common/loader/resource_type_util.h" namespace android_webview { AwURLLoaderThrottleProvider::AwURLLoaderThrottleProvider( blink::ThreadSafeBrowserInterfaceBrokerProxy* broker, blink::URLLoaderThrottleProviderType type) : type_(type) { DETACH_FROM_THREAD(thread_checker_); broker->GetInterface(safe_browsing_remote_.InitWithNewPipeAndPassReceiver()); } AwURLLoaderThrottleProvider::AwURLLoaderThrottleProvider( const AwURLLoaderThrottleProvider& other) : type_(other.type_) { DETACH_FROM_THREAD(thread_checker_); if (other.safe_browsing_) { other.safe_browsing_->Clone( safe_browsing_remote_.InitWithNewPipeAndPassReceiver()); } } std::unique_ptr AwURLLoaderThrottleProvider::Clone() { DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); if (safe_browsing_remote_) safe_browsing_.Bind(std::move(safe_browsing_remote_)); return base::WrapUnique(new AwURLLoaderThrottleProvider(*this)); } AwURLLoaderThrottleProvider::~AwURLLoaderThrottleProvider() { DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); } blink::WebVector> AwURLLoaderThrottleProvider::CreateThrottles( int render_frame_id, const blink::WebURLRequest& request) { DCHECK_CALLED_ON_VALID_THREAD(thread_checker_); blink::WebVector> throttles; // Some throttles have already been added in the browser for frame resources. // Don't add them for frame requests. bool is_frame_resource = blink::IsRequestDestinationFrame(request.GetRequestDestination()); DCHECK(!is_frame_resource || type_ == blink::URLLoaderThrottleProviderType::kFrame); if (!is_frame_resource) { if (safe_browsing_remote_) safe_browsing_.Bind(std::move(safe_browsing_remote_)); throttles.emplace_back( std::make_unique( safe_browsing_.get(), render_frame_id)); } return throttles; } void AwURLLoaderThrottleProvider::SetOnline(bool is_online) {} } // namespace android_webview