1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80
|
// Copyright 2022 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef COMPONENTS_CAST_RECEIVER_RENDERER_CONTENT_RENDERER_CLIENT_MIXINS_IMPL_H_
#define COMPONENTS_CAST_RECEIVER_RENDERER_CONTENT_RENDERER_CLIENT_MIXINS_IMPL_H_
#include <memory>
#include <string_view>
#include "base/containers/flat_map.h"
#include "base/functional/callback.h"
#include "base/memory/weak_ptr.h"
#include "components/cast_receiver/renderer/public/content_renderer_client_mixins.h"
#include "components/cast_receiver/renderer/wrapping_url_loader_throttle_provider.h"
namespace blink {
class URLLoaderThrottleProvider;
} // namespace blink
namespace content {
class RenderFrame;
} // namespace content
namespace cast_receiver {
class UrlRewriteRulesProvider;
// Functions to provide additional ContentRendererClient functionality as
// required for a functioning Cast receiver.
//
// TODO(crbug.com/1359580): Use this class in the
// CastRuntimeContentRendererClient.
class ContentRendererClientMixinsImpl
: public ContentRendererClientMixins,
public WrappingURLLoaderThrottleProvider::Client {
public:
using ContentRendererClientMixins::IsCorsExemptHeadersCallback;
explicit ContentRendererClientMixinsImpl(
IsCorsExemptHeadersCallback is_cors_exempt_header_callback);
~ContentRendererClientMixinsImpl() override;
ContentRendererClientMixinsImpl(const ContentRendererClientMixinsImpl&) =
delete;
ContentRendererClientMixinsImpl& operator=(
const ContentRendererClientMixinsImpl&) = delete;
// ContentRendererClientMixins implementation.
void RenderFrameCreated(content::RenderFrame& render_frame) override;
bool DeferMediaLoad(content::RenderFrame& render_frame,
base::OnceClosure closure) override;
std::unique_ptr<blink::URLLoaderThrottleProvider>
CreateURLLoaderThrottleProvider() override;
std::unique_ptr<blink::URLLoaderThrottleProvider>
ExtendURLLoaderThrottleProvider(
std::unique_ptr<blink::URLLoaderThrottleProvider> delegated_load_provider)
override;
private:
// Called by UrlRewriteRulesProvider instances as part of frame RenderFrame
// deletion.
void OnRenderFrameRemoved(const blink::LocalFrameToken& frame_token);
// WrappingURLLoaderThrottleProvider::Client implementation.
UrlRewriteRulesProvider* GetUrlRewriteRulesProvider(
const blink::LocalFrameToken& frame_token) override;
bool IsCorsExemptHeader(std::string_view header) override;
IsCorsExemptHeadersCallback is_cors_exempt_header_callback_;
base::flat_map<blink::LocalFrameToken /* frame_token */,
std::unique_ptr<UrlRewriteRulesProvider>>
url_rewrite_rules_providers_;
base::WeakPtrFactory<ContentRendererClientMixinsImpl> weak_factory_{this};
};
} // namespace cast_receiver
#endif // COMPONENTS_CAST_RECEIVER_RENDERER_CONTENT_RENDERER_CLIENT_MIXINS_IMPL_H_
|