#ifndef CONTENT_RENDERER_RENDER_FRAME_IMPL_H_
#define CONTENT_RENDERER_RENDER_FRAME_IMPL_H_
#include <stddef.h>
#include <stdint.h>
#include <map>
#include <memory>
#include <optional>
#include <set>
#include <string>
#include <string_view>
#include <unordered_set>
#include <utility>
#include <vector>
#include "base/containers/id_map.h"
#include "base/files/file_path.h"
#include "base/functional/callback.h"
#include "base/gtest_prod_util.h"
#include "base/memory/raw_ptr.h"
#include "base/memory/raw_ref.h"
#include "base/memory/read_only_shared_memory_region.h"
#include "base/memory/scoped_refptr.h"
#include "base/memory/weak_ptr.h"
#include "base/observer_list.h"
#include "base/process/process_handle.h"
#include "base/task/single_thread_task_runner.h"
#include "base/timer/timer.h"
#include "base/types/optional_ref.h"
#include "base/unguessable_token.h"
#include "base/uuid.h"
#include "build/build_config.h"
#include "cc/input/browser_controls_state.h"
#include "cef/ohos_cef_ext/libcef/common/mojom/oh_gin_javascript_bridge.mojom.h"
#include "content/common/buildflags.h"
#include "content/common/content_export.h"
#include "content/common/download/mhtml_file_writer.mojom.h"
#include "content/common/frame.mojom.h"
#include "content/common/navigation_client.mojom.h"
#include "content/common/renderer.mojom.h"
#include "content/common/web_ui.mojom.h"
#include "content/public/common/alternative_error_page_override_info.mojom.h"
#include "content/public/common/bindings_policy.h"
#include "content/public/common/extra_mojo_js_features.mojom.h"
#include "content/public/common/referrer.h"
#include "content/public/common/stop_find_action.h"
#include "content/public/common/widget_type.h"
#include "content/public/renderer/render_frame.h"
#include "content/public/renderer/render_frame_media_playback_options.h"
#include "content/renderer/client_navigation_throttler.h"
#include "content/renderer/content_security_policy_util.h"
#include "content/renderer/local_resource_url_loader_factory.h"
#include "content/renderer/media/media_factory.h"
#include "content/renderer/navigation_client.h"
#include "media/base/routing_token_callback.h"
#include "media/base/speech_recognition_client.h"
#include "mojo/public/cpp/bindings/associated_receiver.h"
#include "mojo/public/cpp/bindings/associated_remote.h"
#include "mojo/public/cpp/bindings/pending_associated_receiver.h"
#include "mojo/public/cpp/bindings/pending_receiver.h"
#include "mojo/public/cpp/bindings/pending_remote.h"
#include "mojo/public/cpp/bindings/receiver.h"
#include "mojo/public/cpp/bindings/receiver_set.h"
#include "mojo/public/cpp/bindings/remote.h"
#include "mojo/public/cpp/system/data_pipe.h"
#include "services/network/public/cpp/permissions_policy/permissions_policy_declaration.h"
#include "services/network/public/mojom/url_loader_factory.mojom.h"
#include "services/network/public/mojom/url_response_head.mojom-forward.h"
#include "services/service_manager/public/cpp/binder_registry.h"
#include "services/service_manager/public/mojom/interface_provider.mojom.h"
#include "third_party/blink/public/common/associated_interfaces/associated_interface_provider.h"
#include "third_party/blink/public/common/associated_interfaces/associated_interface_registry.h"
#include "third_party/blink/public/common/frame/frame_owner_element_type.h"
#include "third_party/blink/public/common/loader/loading_behavior_flag.h"
#include "third_party/blink/public/common/loader/url_loader_factory_bundle.h"
#include "third_party/blink/public/common/permissions_policy/document_policy.h"
#include "third_party/blink/public/common/renderer_preferences/renderer_preferences.h"
#include "third_party/blink/public/common/subresource_load_metrics.h"
#include "third_party/blink/public/common/tokens/tokens.h"
#include "third_party/blink/public/common/unique_name/unique_name_helper.h"
#include "third_party/blink/public/mojom/autoplay/autoplay.mojom.h"
#include "third_party/blink/public/mojom/browser_interface_broker.mojom.h"
#include "third_party/blink/public/mojom/choosers/file_chooser.mojom.h"
#include "third_party/blink/public/mojom/commit_result/commit_result.mojom.h"
#include "third_party/blink/public/mojom/devtools/console_message.mojom.h"
#include "third_party/blink/public/mojom/fetch/fetch_api_request.mojom.h"
#include "third_party/blink/public/mojom/frame/frame_owner_properties.mojom-forward.h"
#include "third_party/blink/public/mojom/frame/frame_replication_state.mojom-forward.h"
#include "third_party/blink/public/mojom/frame/policy_container.mojom-shared.h"
#include "third_party/blink/public/mojom/frame/triggering_event_info.mojom-shared.h"
#include "third_party/blink/public/mojom/frame/user_activation_update_types.mojom.h"
#include "third_party/blink/public/mojom/input/focus_type.mojom-forward.h"
#include "third_party/blink/public/mojom/loader/code_cache.mojom.h"
#include "third_party/blink/public/mojom/loader/local_resource_loader_config.mojom-forward.h"
#include "third_party/blink/public/mojom/loader/resource_load_info.mojom.h"
#include "third_party/blink/public/mojom/loader/resource_load_info_notifier.mojom.h"
#include "third_party/blink/public/mojom/media/renderer_audio_input_stream_factory.mojom.h"
#include "third_party/blink/public/mojom/navigation/navigation_params.mojom-forward.h"
#include "third_party/blink/public/mojom/render_accessibility.mojom.h"
#include "third_party/blink/public/mojom/service_worker/service_worker_object.mojom.h"
#include "third_party/blink/public/mojom/use_counter/metrics/css_property_id.mojom.h"
#include "third_party/blink/public/platform/browser_interface_broker_proxy.h"
#include "third_party/blink/public/platform/child_url_loader_factory_bundle.h"
#include "third_party/blink/public/platform/web_media_player.h"
#include "third_party/blink/public/platform/web_thread_safe_data.h"
#include "third_party/blink/public/platform/web_url.h"
#include "third_party/blink/public/platform/websocket_handshake_throttle_provider.h"
#include "third_party/blink/public/web/web_ax_object.h"
#include "third_party/blink/public/web/web_document_loader.h"
#include "third_party/blink/public/web/web_frame_load_type.h"
#include "third_party/blink/public/web/web_frame_serializer.h"
#include "third_party/blink/public/web/web_frame_serializer_client.h"
#include "third_party/blink/public/web/web_history_commit_type.h"
#include "third_party/blink/public/web/web_link_preview_triggerer.h"
#include "third_party/blink/public/web/web_local_frame.h"
#include "third_party/blink/public/web/web_local_frame_client.h"
#include "third_party/blink/public/web/web_meaningful_layout.h"
#include "ui/accessibility/ax_event.h"
#include "ui/accessibility/ax_mode.h"
#include "ui/accessibility/ax_node_id_forward.h"
#include "ui/gfx/range/range.h"
#include "url/gurl.h"
#include "url/origin.h"
#include "v8/include/v8-forward.h"
#if BUILDFLAG(IS_ANDROID)
#include "content/common/gin_java_bridge.mojom.h"
#endif
#if BUILDFLAG(ARKWEB_SAME_LAYER)
#include "arkweb/chromium_ext/third_party/blink/renderer/platform/web_native_bridge.h"
#endif
#if BUILDFLAG(ARKWEB_BLANK_OPTIMIZE)
#include "arkweb/chromium_ext/base/ohos/blankless/blankless_controller.h"
#endif
#if BUILDFLAG(ARKWEB_DFX_TRACING)
#include "arkweb/chromium_ext/content/renderer/ark_web_render_frame_impl.h"
#endif
namespace blink {
namespace scheduler {
class WebAgentGroupScheduler;
}
class WeakWrapperResourceLoadInfoNotifier;
class WebBackgroundResourceFetchAssets;
class WebContentDecryptionModule;
class WebElement;
class WebLocalFrame;
class WebMediaStreamDeviceObserver;
class WebString;
class WebURL;
struct FramePolicy;
struct JavaScriptFrameworkDetectionResult;
}
namespace gfx {
class Point;
class Range;
}
namespace media {
class MediaPermission;
}
namespace url {
class Origin;
class SchemeHostPort;
}
namespace content {
class AgentSchedulingGroup;
class BlinkInterfaceRegistryImpl;
class DocumentState;
class MediaPermissionDispatcher;
class MHTMLPartsGenerationDelegateImpl;
class NavigationClient;
class NavigationState;
class RenderAccessibilityManager;
class RenderFrameObserver;
class ArkwebMediaFactoryExt;
class RenderFrameImplUtils;
class CONTENT_EXPORT RenderFrameImpl
: public RenderFrame,
public blink::mojom::ResourceLoadInfoNotifier,
blink::mojom::AutoplayConfigurationClient,
public mojom::Frame,
mojom::FrameBindingsControl,
mojom::MhtmlFileWriter,
#if BUILDFLAG(IS_ARKWEB)
public blink::WebLocalFrameClientExt,
#else
public blink::WebLocalFrameClient,
#endif
service_manager::mojom::InterfaceProvider {
public:
friend class RenderFrameImplUtils;
static RenderFrameImpl* CreateMainFrame(
AgentSchedulingGroup& agent_scheduling_group,
blink::WebView* web_view,
blink::WebFrame* opener,
bool is_for_nested_main_frame,
bool is_for_scalable_page,
blink::mojom::FrameReplicationStatePtr replication_state,
const base::UnguessableToken& devtools_frame_token,
mojom::CreateLocalMainFrameParamsPtr params,
#if BUILDFLAG(ARKWEB_ARKWEB_EXTENSIONS)
bool is_offscreen,
#endif
const blink::WebURL& base_url);
static void CreateFrame(
AgentSchedulingGroup& agent_scheduling_group,
const blink::LocalFrameToken& token,
int routing_id,
mojo::PendingAssociatedReceiver<mojom::Frame> frame_receiver,
mojo::PendingRemote<blink::mojom::BrowserInterfaceBroker>
browser_interface_broker,
mojo::PendingAssociatedRemote<blink::mojom::AssociatedInterfaceProvider>
associated_interface_provider,
blink::WebView* web_view,
base::optional_ref<const blink::FrameToken> previous_frame_token,
base::optional_ref<const blink::FrameToken> opener_frame_token,
base::optional_ref<const blink::FrameToken> parent_frame_token,
base::optional_ref<const blink::FrameToken> previous_sibling_frame_token,
const base::UnguessableToken& devtools_frame_token,
const std::optional<base::UnguessableToken>& navigation_metrics_token,
blink::mojom::TreeScopeType tree_scope_type,
blink::mojom::FrameReplicationStatePtr replicated_state,
mojom::CreateFrameWidgetParamsPtr widget_params,
blink::mojom::FrameOwnerPropertiesPtr frame_owner_properties,
bool is_on_initial_empty_document,
const blink::DocumentToken& document_token,
blink::mojom::PolicyContainerPtr policy_container,
bool is_for_nested_main_frame);
static RenderFrameImpl* FromWebFrame(blink::WebFrame* web_frame);
struct CONTENT_EXPORT CreateParams {
CreateParams(
AgentSchedulingGroup& agent_scheduling_group,
const blink::LocalFrameToken& frame_token,
int32_t routing_id,
mojo::PendingAssociatedReceiver<mojom::Frame> frame_receiver,
mojo::PendingAssociatedRemote<blink::mojom::AssociatedInterfaceProvider>
associated_interface_provider,
const base::UnguessableToken& devtools_frame_token,
bool is_for_nested_main_frame);
~CreateParams();
CreateParams(CreateParams&&);
CreateParams& operator=(CreateParams&&);
raw_ptr<AgentSchedulingGroup> agent_scheduling_group;
blink::LocalFrameToken frame_token;
int32_t routing_id;
mojo::PendingAssociatedReceiver<mojom::Frame> frame_receiver;
mojo::PendingAssociatedRemote<blink::mojom::AssociatedInterfaceProvider>
associated_interface_provider;
base::UnguessableToken devtools_frame_token;
bool is_for_nested_main_frame;
};
using CreateRenderFrameImplFunction = RenderFrameImpl* (*)(CreateParams);
static void InstallCreateHook(CreateRenderFrameImplFunction create_frame);
blink::WebURL OverrideFlashEmbedWithHTML(const blink::WebURL& url) override;
RenderFrameImpl(const RenderFrameImpl&) = delete;
RenderFrameImpl& operator=(const RenderFrameImpl&) = delete;
~RenderFrameImpl() override;
const std::string& unique_name() const { return unique_name_helper_.value(); }
blink::WebFrameWidget* GetLocalRootWebFrameWidget();
virtual void Initialize(blink::WebFrame* parent);
void DidStartLoading() override;
void DidStopLoading() override;
RenderAccessibilityManager* GetRenderAccessibilityManager() {
return render_accessibility_manager_.get();
}
void NotifyAccessibilityModeChange(ui::AXMode new_mode);
bool in_frame_tree() { return in_frame_tree_; }
void OnAssociatedInterfaceRequest(const std::string& interface_name,
mojo::ScopedInterfaceEndpointHandle handle);
RenderFrame* GetMainRenderFrame() override;
RenderAccessibility* GetRenderAccessibility() override;
std::unique_ptr<AXTreeSnapshotter> CreateAXTreeSnapshotter(
ui::AXMode ax_mode) override;
blink::WebLocalFrame* GetWebFrame() override;
const blink::WebLocalFrame* GetWebFrame() const override;
blink::WebView* GetWebView() override;
const blink::WebView* GetWebView() const override;
const blink::web_pref::WebPreferences& GetBlinkPreferences() override;
void ShowVirtualKeyboard() override;
void ExecuteJavaScript(const std::u16string& javascript) override;
bool IsMainFrame() override;
bool IsInFencedFrameTree() const override;
bool IsHidden() override;
void BindLocalInterface(
const std::string& interface_name,
mojo::ScopedMessagePipeHandle interface_pipe) override;
blink::AssociatedInterfaceRegistry* GetAssociatedInterfaceRegistry() override;
blink::AssociatedInterfaceProvider* GetRemoteAssociatedInterfaces() override;
void SetSelectedText(const std::u16string& selection_text,
size_t offset,
const gfx::Range& range) override;
#if BUILDFLAG(ARKWEB_AI)
void CloseImageOverlaySelection() override;
#endif
#if BUILDFLAG(ARKWEB_DFX_TRACING) && !defined(COMPONENT_BUILD)
void SendCommitNavigationTime(int64_t start_time) override;
#endif
void AddMessageToConsole(blink::mojom::ConsoleMessageLevel level,
const std::string& message) override;
bool IsPasting() override;
bool IsRequestingNavigation() override;
void LoadHTMLStringForTesting(std::string_view html,
const GURL& base_url,
const std::string& text_encoding,
const GURL& unreachable_url,
bool replace_current_item) override;
scoped_refptr<base::SingleThreadTaskRunner> GetTaskRunner(
blink::TaskType task_type) override;
BindingsPolicySet GetEnabledBindings() override;
void SetAccessibilityModeForTest(ui::AXMode new_mode) override;
const RenderFrameMediaPlaybackOptions& GetRenderFrameMediaPlaybackOptions()
override;
void SetRenderFrameMediaPlaybackOptions(
const RenderFrameMediaPlaybackOptions& opts) override;
void SetAllowsCrossBrowsingInstanceFrameLookup() override;
gfx::RectF ElementBoundsInWindow(const blink::WebElement& element) override;
[[nodiscard]] gfx::Rect ConvertViewportToWindow(
const gfx::Rect& rect) override;
float GetDeviceScaleFactor() override;
blink::scheduler::WebAgentGroupScheduler& GetAgentGroupScheduler() override;
#if BUILDFLAG(ARKWEB_PDF)
void OnPdfScrollAtBottom(const std::string& url) override;
void OnPdfLoadEvent(int32_t result, const std::string& url) override;
void SetIsPDF(bool is_pdf) override;
bool IsPDF() override;
#endif
#if BUILDFLAG(ARKWEB_DRAG_DROP)
void ClearContextMenu() override;
#endif
#if BUILDFLAG(ARKWEB_INPUT_EVENTS)
void SetZoomLevel(float magnify_delta, const gfx::Point& anchor) override;
void SetOverscrollMode(int mode) override;
bool IsElementExist(std::string xPath) override;
#if BUILDFLAG(ARKWEB_GET_SCROLL_OFFSET)
gfx::Vector2dF GetOverScrollOffset() override;
#endif
#endif
#if BUILDFLAG(ARKWEB_MENU)
void MouseSelectMenuShow(bool show) override;
void ChangeVisibilityOfQuickMenu() override;
void HideQuickMenu() override;
#endif
#if BUILDFLAG(ARKWEB_EXT_VIDEO_LOAD_OPTIMIZATION)
bool IsVideoLoadOptimizationEnabled(const std::string& url) override;
int GetVideoPreloadTimeDefault() const override;
int GetVideoMinCacheTimeDefault() const override;
int GetVideoMaxCacheTimeDefault() const override;
int GetVideoMoovSizeDefault() const override;
int GetVideoBitrateDefault() const override;
bool SetNewsFeedPageFitted() override;
#endif
#if BUILDFLAG(ARKWEB_JS_ON_DOCUMENT_END)
void OnDocumentEndReady() override;
#endif
void AddAutoplayFlags(const url::Origin& origin,
const int32_t flags) override;
#if BUILDFLAG(IS_ANDROID)
void NotifyUpdateUserGestureCarryoverInfo() override;
#endif
void NotifyResourceRedirectReceived(
const net::RedirectInfo& redirect_info,
network::mojom::URLResponseHeadPtr redirect_response) override;
void NotifyResourceResponseReceived(
int64_t request_id,
const url::SchemeHostPort& final_response_url,
network::mojom::URLResponseHeadPtr head,
network::mojom::RequestDestination request_destination,
bool is_ad_resource) override;
void NotifyResourceTransferSizeUpdated(int64_t request_id,
int32_t transfer_size_diff) override;
void NotifyResourceLoadCompleted(
blink::mojom::ResourceLoadInfoPtr resource_load_info,
const ::network::URLLoaderCompletionStatus& status) override;
void NotifyResourceLoadCanceled(int64_t request_id) override;
void Clone(mojo::PendingReceiver<blink::mojom::ResourceLoadInfoNotifier>
pending_resource_load_info_notifier) override;
void AllowBindings(int64_t enabled_bindings_flags) override;
void EnableMojoJsBindings(
content::mojom::ExtraMojoJsFeaturesPtr features) override;
void EnableMojoJsBindingsWithBroker(
mojo::PendingRemote<blink::mojom::BrowserInterfaceBroker>) override;
void BindWebUI(
mojo::PendingAssociatedReceiver<mojom::WebUI> Receiver,
mojo::PendingAssociatedRemote<mojom::WebUIHost> remote) override;
void CommitNavigation(
blink::mojom::CommonNavigationParamsPtr common_params,
blink::mojom::CommitNavigationParamsPtr commit_params,
network::mojom::URLResponseHeadPtr response_head,
mojo::ScopedDataPipeConsumerHandle response_body,
network::mojom::URLLoaderClientEndpointsPtr url_loader_client_endpoints,
std::unique_ptr<blink::PendingURLLoaderFactoryBundle>
subresource_loader_factories,
std::optional<std::vector<blink::mojom::TransferrableURLLoaderPtr>>
subresource_overrides,
blink::mojom::ControllerServiceWorkerInfoPtr
controller_service_worker_info,
blink::mojom::ServiceWorkerContainerInfoForClientPtr container_info,
mojo::PendingRemote<network::mojom::URLLoaderFactory>
subresource_proxying_loader_factory,
mojo::PendingRemote<network::mojom::URLLoaderFactory>
keep_alive_loader_factory,
mojo::PendingAssociatedRemote<blink::mojom::FetchLaterLoaderFactory>
fetch_later_loader_factory,
const blink::DocumentToken& document_token,
const base::UnguessableToken& devtools_navigation_token,
const base::Uuid& base_auction_nonce,
const std::optional<network::ParsedPermissionsPolicy>& permissions_policy,
blink::mojom::PolicyContainerPtr policy_container,
mojo::PendingRemote<blink::mojom::CodeCacheHost> code_cache_host,
mojo::PendingRemote<blink::mojom::CodeCacheHost>
code_cache_host_for_background,
mojom::CookieManagerInfoPtr cookie_manager_info,
mojom::StorageInfoPtr storage_info,
mojom::NavigationClient::CommitNavigationCallback commit_callback);
void CommitFailedNavigation(
blink::mojom::CommonNavigationParamsPtr common_params,
blink::mojom::CommitNavigationParamsPtr commit_params,
bool has_stale_copy_in_cache,
int error_code,
int extended_error_code,
net::ResolveErrorInfo resolve_error_info,
const std::optional<std::string>& error_page_content,
std::unique_ptr<blink::PendingURLLoaderFactoryBundle>
subresource_loader_factories,
const blink::DocumentToken& document_token,
const base::UnguessableToken& devtools_navigation_token,
blink::mojom::PolicyContainerPtr policy_container,
mojom::AlternativeErrorPageOverrideInfoPtr alternative_error_page_info,
mojom::NavigationClient::CommitFailedNavigationCallback
per_navigation_mojo_interface_callback);
void SerializeAsMHTML(const mojom::SerializeAsMHTMLParamsPtr params,
SerializeAsMHTMLCallback callback) override;
void BindToFrame(blink::WebNavigationControl* frame) override;
blink::WebPlugin* CreatePlugin(const blink::WebPluginParams& params) override;
std::unique_ptr<blink::WebMediaPlayer> CreateMediaPlayer(
const blink::WebMediaPlayerSource& source,
blink::WebMediaPlayerClient* client,
blink::MediaInspectorContext* inspector_context,
blink::WebMediaPlayerEncryptedMediaClient* encrypted_client,
blink::WebContentDecryptionModule* initial_cdm,
const blink::WebString& sink_id,
const cc::LayerTreeSettings* settings,
scoped_refptr<base::TaskRunner> compositor_worker_task_runner) override;
#if BUILDFLAG(ARKWEB_SAME_LAYER)
blink::WebNativeBridge* CreateWebNativeBridge(
blink::WebNativeClient* client) override;
float DeviceScaleFactor() override;
#endif
std::unique_ptr<blink::WebContentSettingsClient>
CreateWorkerContentSettingsClient() override;
#if !BUILDFLAG(IS_ANDROID)
std::unique_ptr<media::SpeechRecognitionClient>
CreateSpeechRecognitionClient() override;
#endif
scoped_refptr<blink::WebWorkerFetchContext> CreateWorkletFetchContext()
override;
scoped_refptr<blink::WebWorkerFetchContext> CreateWorkerFetchContext(
blink::WebDedicatedWorkerHostFactoryClient* factory_client) override;
std::unique_ptr<blink::WebPrescientNetworking> CreatePrescientNetworking()
override;
std::unique_ptr<blink::ResourceLoadInfoNotifierWrapper>
CreateResourceLoadInfoNotifierWrapper() override;
std::unique_ptr<blink::WebServiceWorkerProvider> CreateServiceWorkerProvider()
override;
blink::AssociatedInterfaceProvider* GetRemoteNavigationAssociatedInterfaces()
override;
blink::WebLocalFrame* CreateChildFrame(
blink::mojom::TreeScopeType scope,
const blink::WebString& name,
const blink::WebString& fallback_name,
const blink::FramePolicy& frame_policy,
const blink::WebFrameOwnerProperties& frame_owner_properties,
blink::FrameOwnerElementType frame_owner_element_type,
blink::WebPolicyContainerBindParams policy_container_bind_params,
ukm::SourceId document_ukm_source_id,
FinishChildFrameCreationFn finish_creation) override;
void DidCreateFencedFrame(
const blink::RemoteFrameToken& frame_token) override;
blink::WebFrame* FindFrame(const blink::WebString& name) override;
void WillDetach(blink::DetachReason detach_reason) override;
void FrameDetached(blink::DetachReason detach_reason) override;
void DidChangeName(const blink::WebString& name) override;
void DidMatchCSS(
const std::vector<blink::WebString>& newly_matching_selectors,
const std::vector<blink::WebString>& stopped_matching_selectors) override;
bool ShouldReportDetailedMessageForSourceAndSeverity(
blink::mojom::ConsoleMessageLevel log_level,
const blink::WebString& source) override;
void DidAddMessageToConsole(const blink::WebConsoleMessage& message,
const blink::WebString& source_name,
unsigned source_line,
const blink::WebString& stack_trace) override;
void BeginNavigation(std::unique_ptr<blink::WebNavigationInfo> info) override;
void DidCreateDocumentLoader(
blink::WebDocumentLoader* document_loader) override;
bool SwapIn(blink::WebFrame* previous_web_frame) override;
void DidCommitNavigation(
blink::WebHistoryCommitType commit_type,
bool should_reset_browser_interface_broker,
const network::ParsedPermissionsPolicy& permissions_policy_header,
const blink::DocumentPolicyFeatureState& document_policy_header) override;
void DidCommitDocumentReplacementNavigation(
blink::WebDocumentLoader* document_loader) override;
void DidClearWindowObject() override;
void DidCreateDocumentElement() override;
void RunScriptsAtDocumentElementAvailable() override;
#if BUILDFLAG(ARKWEB_JSPROXY)
void RunScriptsAtHeadReady() override;
#endif
void DidReceiveTitle(const blink::WebString& title) override;
void DidDispatchDOMContentLoadedEvent() override;
void RunScriptsAtDocumentReady() override;
void RunScriptsAtDocumentIdle() override;
void DidHandleOnloadEvents() override;
void DidFinishLoad() override;
void DidFinishLoadForPrinting() override;
void DidFinishSameDocumentNavigation(
blink::WebHistoryCommitType commit_type,
bool is_synchronously_committed,
blink::mojom::SameDocumentNavigationType same_document_navigation_type,
bool is_client_redirect,
const std::optional<blink::SameDocNavigationScreenshotDestinationToken>&
screenshot_destination,
base::UnguessableToken same_document_metrics_token) override;
void DidFailAsyncSameDocumentCommit() override;
void WillFreezePage() override;
void DidOpenDocumentInputStream(const blink::WebURL& url) override;
void DidSetPageLifecycleState(
blink::BFCacheStateChange bfcache_change) override;
void NotifyCurrentHistoryItemChanged() override;
void DidUpdateCurrentHistoryItem() override;
base::UnguessableToken GetDevToolsFrameToken() override;
void AbortClientNavigation(bool for_new_navigation) override;
void DidChangeSelection(bool is_empty_selection,
blink::SyncCondition force_sync) override;
void FocusedElementChanged(const blink::WebElement& element) override;
void OnMainFrameIntersectionChanged(
const gfx::Rect& main_frame_intersection_rect) override;
void OnMainFrameViewportRectangleChanged(
const gfx::Rect& main_frame_viewport_rect) override;
void OnMainFrameAdRectangleChanged(int element_id,
const gfx::Rect& ad_rect) override;
void FinalizeRequest(blink::WebURLRequest& request) override;
std::optional<blink::WebURL> WillSendRequest(
const blink::WebURL& target,
const blink::WebSecurityOrigin& security_origin,
const net::SiteForCookies& site_for_cookies,
ForRedirect for_redirect,
const blink::WebURL& upstream_url) override;
void OnOverlayPopupAdDetected() override;
void OnLargeStickyAdDetected() override;
void DidLoadResourceFromMemoryCache(
const blink::WebURLRequest& request,
const blink::WebURLResponse& response) override;
void DidChangePerformanceTiming() override;
void DidObserveUserInteraction(base::TimeTicks max_event_start,
base::TimeTicks max_event_queued_main_thread,
base::TimeTicks max_event_commit_finish,
base::TimeTicks max_event_end,
uint64_t interaction_offset) override;
void DidChangeCpuTiming(base::TimeDelta time) override;
void DidObserveLoadingBehavior(blink::LoadingBehaviorFlag behavior) override;
void DidObserveJavaScriptFrameworks(
const blink::JavaScriptFrameworkDetectionResult&) override;
void DidObserveSubresourceLoad(
const blink::SubresourceLoadMetrics& subresource_load_metrics) override;
void DidObserveNewFeatureUsage(
const blink::UseCounterFeature& feature) override;
void DidObserveSoftNavigation(
blink::SoftNavigationMetricsForReporting metrics) override;
void DidObserveLayoutShift(double score, bool after_input_or_scroll) override;
void DidCreateScriptContext(v8::Local<v8::Context> context,
int world_id) override;
void WillReleaseScriptContext(v8::Local<v8::Context> context,
int world_id) override;
void DidChangeScrollOffset() override;
blink::WebMediaStreamDeviceObserver* MediaStreamDeviceObserver() override;
blink::WebEncryptedMediaClient* EncryptedMediaClient() override;
blink::WebString UserAgentOverride() override;
std::optional<blink::UserAgentMetadata> UserAgentMetadataOverride() override;
blink::mojom::RendererAudioInputStreamFactory* GetAudioInputStreamFactory();
bool AllowContentInitiatedDataUrlNavigations(
const blink::WebURL& url) override;
void PostAccessibilityEvent(const ui::AXEvent& event) override;
bool SendAccessibilitySerialization(
std::vector<ui::AXTreeUpdate> updates,
std::vector<ui::AXEvent> events,
ui::AXLocationAndScrollUpdates location_and_scroll_updates,
bool had_load_complete_messages) override;
scoped_refptr<network::SharedURLLoaderFactory> GetURLLoaderFactory() override;
blink::URLLoaderThrottleProvider* GetURLLoaderThrottleProvider() override;
scoped_refptr<blink::WebBackgroundResourceFetchAssets>
MaybeGetBackgroundResourceFetchAssets() override;
void OnStopLoading() override;
const blink::BrowserInterfaceBrokerProxy& GetBrowserInterfaceBroker()
override;
blink::WebView* CreateNewWindow(
const blink::WebURLRequest& request,
const blink::WebWindowFeatures& features,
const blink::WebString& frame_name,
const gfx::Rect& requested_screen_rect,
blink::WebNavigationPolicy policy,
network::mojom::WebSandboxFlags sandbox_flags,
const blink::SessionStorageNamespaceId& session_storage_namespace_id,
bool& consumed_user_gesture,
const std::optional<blink::Impression>& impression,
const std::optional<blink::WebPictureInPictureWindowOptions>& pip_options,
const blink::WebURL& base_url) override;
std::unique_ptr<blink::WebLinkPreviewTriggerer> CreateLinkPreviewTriggerer()
override;
base::ScopedClosureRunner CreateScopedClientNavigationThrottler() override;
bool IsForInitialWebUI() const override;
void SyncSelectionIfRequired(blink::SyncCondition force_sync) override;
void CreateAudioInputStream(
blink::CrossVariantMojoRemote<
blink::mojom::RendererAudioInputStreamFactoryClientInterfaceBase>
client,
const base::UnguessableToken& session_id,
const media::AudioParameters& params,
bool automatic_gain_control,
uint32_t shared_memory_count,
blink::CrossVariantMojoReceiver<
media::mojom::AudioProcessorControlsInterfaceBase> controls_receiver,
const media::AudioProcessingSettings* settings) override;
void AssociateInputAndOutputForAec(
const base::UnguessableToken& input_stream_id,
const std::string& output_device_id) override;
void DidMeaningfulLayout(blink::WebMeaningfulLayout layout_type) override;
void WasHidden() override;
void WasShown() override;
void OnFrameVisibilityChanged(
blink::mojom::FrameVisibility render_status) override;
void SetUpSharedMemoryForDroppedFrames(
base::ReadOnlySharedMemoryRegion dropped_frames_memory) override;
blink::WebURL LastCommittedUrlForUKM() override;
void ScriptedPrint() override;
bool DeferMediaLoad(bool has_played_media_before, base::OnceClosure closure);
void BindMhtmlFileWriter(
mojo::PendingAssociatedReceiver<mojom::MhtmlFileWriter> receiver);
#if BUILDFLAG(IS_ANDROID)
void BindGinJavaBridge(
mojo::PendingAssociatedReceiver<mojom::GinJavaBridge> receiver);
#endif
void BindOhGinJavascriptBridge(
mojo::PendingAssociatedReceiver<mojom::OhGinJavascriptBridge> receiver);
void BindAutoplayConfiguration(
mojo::PendingAssociatedReceiver<blink::mojom::AutoplayConfigurationClient>
receiver);
void BindFrameBindingsControl(
mojo::PendingAssociatedReceiver<mojom::FrameBindingsControl> receiver);
void BindNavigationClient(
mojo::PendingAssociatedReceiver<mojom::NavigationClient> receiver);
void BindNavigationClientWithParams(
mojo::PendingAssociatedReceiver<mojom::NavigationClient> receiver,
blink::mojom::BeginNavigationParamsPtr begin_params,
blink::mojom::CommonNavigationParamsPtr common_params,
bool is_duplicate_navigation);
virtual mojom::FrameHost* GetFrameHost();
media::MediaPermission* GetMediaPermission();
void SendUpdateState();
void MaybeEnableMojoBindings();
std::unique_ptr<blink::PendingURLLoaderFactoryBundle>
MaybeSetUpLocalResourceLoader(
std::unique_ptr<blink::PendingURLLoaderFactoryBundle> factory_bundle);
void NotifyObserversOfFailedProvisionalLoad();
const blink::RendererPreferences& GetRendererPreferences() const;
void OnDroppedNavigation();
void DidStartResponse(const url::SchemeHostPort& final_response_url,
int request_id,
network::mojom::URLResponseHeadPtr response_head,
network::mojom::RequestDestination request_destination,
bool is_ad_resource);
void DidCompleteResponse(int request_id,
const network::URLLoaderCompletionStatus& status);
void DidCancelResponse(int request_id);
void DidReceiveTransferSizeUpdate(int request_id, int received_data_length);
void SetURLLoaderFactoryOverrideForTest(
scoped_refptr<network::SharedURLLoaderFactory> factory);
scoped_refptr<blink::ChildURLLoaderFactoryBundle> CloneLoaderFactories();
url::Origin GetSecurityOriginOfTopFrame();
void set_send_content_state_immediately(bool value) {
send_content_state_immediately_ = value;
}
base::WeakPtr<media::DecoderFactory> GetMediaDecoderFactory();
blink::ChildURLLoaderFactoryBundle* GetLoaderFactoryBundle() override;
#if BUILDFLAG(ARKWEB_BLANK_OPTIMIZE)
void NotifyLcpForBlankless() override;
void SendBlanklessKeyToRenderFrame(uint32_t nweb_id,
uint64_t blankless_key,
uint64_t frame_sink_id,
int64_t pref_hash) override;
#endif
#if BUILDFLAG(ARKWEB_LOGGER_REPORT)
void PageLoadStartLoggerReport(blink::WebDocumentLoader* document_loader);
void ContentLoadFailedLoggerReport();
void PageLoadFinishedLoggerReport();
#endif
#if BUILDFLAG(ARKWEB_TEST)
bool web_frame_widget_test_mode = false;
blink::WebFrameWidget* web_frame_widget_test = nullptr;
void SetLocalRootWebFrameWidgetForTest(blink::WebFrameWidget* widget);
bool web_view_test_mode = false;
blink::WebView* web_view_test = nullptr;
void SetWebViewForTest(blink::WebView* web_view);
#endif
#if BUILDFLAG(ARKWEB_ARKWEB_EXTENSIONS)
bool IsOffscreen();
#endif
void SetNewFeatureUsageCallback(NewFeatureUsageCallback callback) override;
void SetSubresourceLoadCallback(SubresourceLoadCallback callback) override;
void SetLoadFromMemoryCacheCallback(
LoadFromMemoryCacheCallback callback) override;
void SetDidStartResponseCallback(DidStartResponseCallback callback) override;
void SetDidCompleteResponseCallback(
DidCompleteResponseCallback callback) override;
void SetDidCancelResponseCallback(
DidCancelResponseCallback callback) override;
std::unique_ptr<NavigationClient> TakeNavigationClient() {
return std::move(navigation_client_impl_);
}
void set_navigation_client_impl(std::unique_ptr<NavigationClient> client) {
navigation_client_impl_ = std::move(client);
}
base::WeakPtr<RenderFrame> GetRenderFrameWeakPtr() override;
protected:
explicit RenderFrameImpl(CreateParams params);
bool IsLocalRoot() const;
const RenderFrameImpl* GetLocalRoot() const;
base::WeakPtr<RenderFrameImpl> GetWeakPtr();
private:
friend class RenderFrameImplTest;
friend class RenderFrameObserver;
friend class TestRenderFrame;
#if BUILDFLAG(ARKWEB_TEST)
friend class ArkWebRenderFrameImplTest;
#endif
FRIEND_TEST_ALL_PREFIXES(RenderAccessibilityImplTest,
AccessibilityMessagesQueueWhileSwappedOut);
FRIEND_TEST_ALL_PREFIXES(RenderFrameImplTest, LocalChildFrameWasShown);
FRIEND_TEST_ALL_PREFIXES(RenderFrameImplTest, ZoomLimit);
FRIEND_TEST_ALL_PREFIXES(RenderFrameImplTest,
TestOverlayRoutingTokenSendsLater);
FRIEND_TEST_ALL_PREFIXES(RenderFrameImplTest,
TestOverlayRoutingTokenSendsNow);
FRIEND_TEST_ALL_PREFIXES(RenderFrameImplTest, SendUpdateCancelsPending);
FRIEND_TEST_ALL_PREFIXES(RenderFrameImplMojoJsDeathTest,
EnabledBindingsTampered);
FRIEND_TEST_ALL_PREFIXES(RenderFrameImplMojoJsDeathTest,
EnableMojoJsBindingsTampered);
FRIEND_TEST_ALL_PREFIXES(RenderFrameImplMojoJsDeathTest,
MojoJsInterfaceBrokerTampered);
template <typename T>
class AutoResetMember {
public:
AutoResetMember(RenderFrameImpl* frame,
T RenderFrameImpl::*member,
T new_value)
: weak_frame_(frame->weak_factory_.GetWeakPtr()),
scoped_variable_(&(frame->*member)),
original_value_(*scoped_variable_) {
*scoped_variable_ = new_value;
}
~AutoResetMember() {
if (weak_frame_)
*scoped_variable_ = original_value_;
}
private:
base::WeakPtr<RenderFrameImpl> weak_frame_;
raw_ptr<T> scoped_variable_;
T original_value_;
};
static RenderFrameImpl* Create(
AgentSchedulingGroup& agent_scheduling_group,
const blink::LocalFrameToken& frame_token,
int32_t routing_id,
mojo::PendingAssociatedReceiver<mojom::Frame> frame_receiver,
mojo::PendingAssociatedRemote<blink::mojom::AssociatedInterfaceProvider>
associated_interface_provider,
const base::UnguessableToken& devtools_frame_token,
bool is_for_nested_main_frame);
void AddObserver(RenderFrameObserver* observer);
void RemoveObserver(RenderFrameObserver* observer);
bool IsAccessibilityEnabled() const override;
void CommitSameDocumentNavigation(
blink::mojom::CommonNavigationParamsPtr common_params,
blink::mojom::CommitNavigationParamsPtr commit_params,
CommitSameDocumentNavigationCallback callback) override;
void UpdateSubresourceLoaderFactories(
std::unique_ptr<blink::PendingURLLoaderFactoryBundle>
subresource_loader_factories) override;
void SetWantErrorMessageStackTrace() override;
void Unload(
bool is_loading,
blink::mojom::FrameReplicationStatePtr replicated_frame_state,
const blink::RemoteFrameToken& frame_token,
blink::mojom::RemoteFrameInterfacesFromBrowserPtr remote_frame_interfaces,
blink::mojom::RemoteMainFrameInterfacesPtr remote_main_frame_interfaces,
const std::optional<base::UnguessableToken>& devtools_frame_token)
override;
void Delete(mojom::FrameDeleteIntention intent) override;
void UndoCommitNavigation(
bool is_loading,
blink::mojom::FrameReplicationStatePtr replicated_frame_state,
const blink::RemoteFrameToken& frame_token,
blink::mojom::RemoteFrameInterfacesFromBrowserPtr remote_frame_interfaces,
blink::mojom::RemoteMainFrameInterfacesPtr remote_main_frame_interfaces)
override;
void GetInterfaceProvider(
mojo::PendingReceiver<service_manager::mojom::InterfaceProvider> receiver)
override;
void SnapshotAccessibilityTree(
mojom::SnapshotAccessibilityTreeParamsPtr params,
SnapshotAccessibilityTreeCallback callback) override;
void GetSerializedHtmlWithLocalLinks(
const base::flat_map<GURL, base::FilePath>& url_map,
const base::flat_map<blink::FrameToken, base::FilePath>& frame_token_map,
bool save_with_empty_url,
mojo::PendingRemote<mojom::FrameHTMLSerializerHandler> handler_remote)
override;
void OnSerializeMHTMLComplete(
std::unique_ptr<MHTMLPartsGenerationDelegateImpl> delegate,
SerializeAsMHTMLCallback callback,
std::vector<blink::WebThreadSafeData> mhtml_contents,
blink::WebThreadSafeData frame_mhtml_data);
void OnWriteMHTMLComplete(
SerializeAsMHTMLCallback callback,
std::unordered_set<std::string> serialized_resources_uri_digests,
mojom::MhtmlSaveStatus save_status);
void OpenURL(std::unique_ptr<blink::WebNavigationInfo> info);
void SetLoaderFactoryBundle(
scoped_refptr<blink::ChildURLLoaderFactoryBundle> loader_factories);
scoped_refptr<blink::ChildURLLoaderFactoryBundle> CreateLoaderFactoryBundle(
std::unique_ptr<blink::PendingURLLoaderFactoryBundle> info,
std::optional<std::vector<blink::mojom::TransferrableURLLoaderPtr>>
subresource_overrides,
mojo::PendingRemote<network::mojom::URLLoaderFactory>
subresource_proxying_loader_factory,
mojo::PendingRemote<network::mojom::URLLoaderFactory>
keep_alive_loader_factory,
mojo::PendingAssociatedRemote<blink::mojom::FetchLaterLoaderFactory>
fetch_later_loader_factory);
void UpdateEncoding(blink::WebFrame* frame, const std::string& encoding_name);
void InitializeMediaStreamDeviceObserver();
void BeginNavigationInternal(std::unique_ptr<blink::WebNavigationInfo> info,
bool is_history_navigation_in_new_child_frame,
base::TimeTicks renderer_before_unload_start,
base::TimeTicks renderer_before_unload_end);
void SynchronouslyCommitAboutBlankForBug778318(
std::unique_ptr<blink::WebNavigationInfo> info);
void CommitNavigationWithParams(
blink::mojom::CommonNavigationParamsPtr common_params,
blink::mojom::CommitNavigationParamsPtr commit_params,
std::unique_ptr<blink::PendingURLLoaderFactoryBundle>
subresource_loader_factories,
std::optional<std::vector<blink::mojom::TransferrableURLLoaderPtr>>
subresource_overrides,
blink::mojom::ControllerServiceWorkerInfoPtr
controller_service_worker_info,
blink::mojom::ServiceWorkerContainerInfoForClientPtr container_info,
mojo::PendingRemote<network::mojom::URLLoaderFactory>
subresource_proxying_loader_factory,
mojo::PendingRemote<network::mojom::URLLoaderFactory>
keep_alive_loader_factory,
mojo::PendingAssociatedRemote<blink::mojom::FetchLaterLoaderFactory>
fetch_later_loader_factory,
mojo::PendingRemote<blink::mojom::CodeCacheHost> code_cache_host,
mojo::PendingRemote<blink::mojom::CodeCacheHost>
code_cache_host_for_background,
mojom::CookieManagerInfoPtr cookie_manager_info,
mojom::StorageInfoPtr storage_info,
std::unique_ptr<DocumentState> document_state,
std::unique_ptr<blink::WebNavigationParams> navigation_params);
void DecodeDataURL(const blink::mojom::CommonNavigationParams& common_params,
const blink::mojom::CommitNavigationParams& commit_params,
std::string* mime_type,
std::string* charset,
std::string* data,
GURL* base_url);
void FinalizeRequestInternal(blink::WebURLRequest& request,
bool for_outermost_main_frame,
ui::PageTransition transition_type);
std::optional<blink::WebURL> WillSendRequestInternal(
const blink::WebURL& target,
const blink::WebSecurityOrigin& security_origin,
const net::SiteForCookies& site_for_cookies,
ForRedirect for_redirect,
const blink::WebURL& upstream_url,
ui::PageTransition transition_type);
GURL GetLoadingUrl() const;
void RegisterMojoInterfaces();
void GetInterface(const std::string& interface_name,
mojo::ScopedMessagePipeHandle interface_pipe) override;
void RequestOverlayRoutingToken(media::RoutingTokenCallback callback);
void BindWebUIReceiver(mojo::PendingReceiver<mojom::WebUI> receiver);
mojom::DidCommitProvisionalLoadParamsPtr MakeDidCommitProvisionalLoadParams(
blink::WebHistoryCommitType commit_type,
ui::PageTransition transition,
NavigationState* navigation_state,
const network::ParsedPermissionsPolicy& permissions_policy_header,
const blink::DocumentPolicyFeatureState& document_policy_header,
const std::optional<base::UnguessableToken>& embedding_token,
std::optional<blink::PageState> previous_page_state);
void UpdateNavigationHistory(blink::WebHistoryCommitType commit_type,
NavigationState* navigation_state);
void NotifyObserversOfNavigationCommit(ui::PageTransition transition);
void UpdateStateForCommit(blink::WebHistoryCommitType commit_type,
ui::PageTransition transition,
NavigationState* navigation_state);
void DidCommitNavigationInternal(
blink::WebHistoryCommitType commit_type,
ui::PageTransition transition,
NavigationState* navigation_state,
const network::ParsedPermissionsPolicy& permissions_policy_header,
const blink::DocumentPolicyFeatureState& document_policy_header,
mojom::DidCommitProvisionalLoadInterfaceParamsPtr interface_params,
mojom::DidCommitSameDocumentNavigationParamsPtr same_document_params,
const std::optional<base::UnguessableToken>& embedding_token);
std::unique_ptr<blink::WebSocketHandshakeThrottle>
CreateWebSocketHandshakeThrottle() override;
bool IsPluginHandledExternally(
const blink::WebElement& plugin_element,
const blink::WebURL& url,
const blink::WebString& suggested_mime_type) override;
bool IsDomStorageDisabled() const override;
v8::Local<v8::Object> GetScriptableObject(
const blink::WebElement& plugin_element,
v8::Isolate* isolate) override;
void PrepareFrameForCommit(
const GURL& url,
const blink::mojom::CommitNavigationParams& commit_params);
bool ShouldUseUserAgentOverride() const;
void SetOldPageLifecycleStateFromNewPageCommitIfNeeded(
const blink::mojom::OldPageInfo* old_page_info,
const GURL& new_page_url);
blink::mojom::CommitResult PrepareForHistoryNavigationCommit(
const blink::mojom::CommonNavigationParams& common_params,
const blink::mojom::CommitNavigationParams& commit_params,
blink::WebHistoryItem* item_for_history_navigation,
blink::WebFrameLoadType* load_type);
void AddMessageToConsoleImpl(blink::mojom::ConsoleMessageLevel level,
const std::string& message,
bool discard_duplicates);
void StartDelayedSyncTimer();
bool SwapOutAndDeleteThis(
bool is_loading,
blink::mojom::FrameReplicationStatePtr replicated_frame_state,
const blink::RemoteFrameToken& frame_token,
blink::mojom::RemoteFrameInterfacesFromBrowserPtr remote_frame_interfaces,
blink::mojom::RemoteMainFrameInterfacesPtr remote_main_frame_interfaces,
const std::optional<base::UnguessableToken>& devtools_frame_token);
void ResetMembersUsedForDurationOfCommit();
#if BUILDFLAG(ARKWEB_MULTI_WINDOW)
bool GetNewWindowWebView(const GURL& target_url,
blink::WebNavigationPolicy policy,
bool allow_popup,
const blink::WebWindowFeatures& features);
#endif
#if BUILDFLAG(ARKWEB_ADBLOCK)
void DidSubresourceFiltered() override;
void OnUpdateAdBlockEnabledToRender(bool site_adblock_enabled) override;
bool GetGlobalAdblockEnabled() override;
#endif
void AbortClientNavigationImpl(bool for_new_navigation);
raw_ptr<blink::WebNavigationControl> frame_ = nullptr;
const raw_ref<AgentSchedulingGroup> agent_scheduling_group_;
bool initialized_ = false;
bool is_main_frame_;
#if BUILDFLAG(ARKWEB_PDF)
bool is_pdf_ = false;
#endif
class UniqueNameFrameAdapter : public blink::UniqueNameHelper::FrameAdapter {
public:
explicit UniqueNameFrameAdapter(RenderFrameImpl* render_frame);
~UniqueNameFrameAdapter() override;
bool IsMainFrame() const override;
bool IsCandidateUnique(std::string_view name) const override;
int GetSiblingCount() const override;
int GetChildCount() const override;
std::vector<std::string> CollectAncestorNames(
BeginPoint begin_point,
bool (*should_stop)(std::string_view)) const override;
std::vector<int> GetFramePosition(BeginPoint begin_point) const override;
private:
blink::WebLocalFrame* GetWebFrame() const;
raw_ptr<RenderFrameImpl> render_frame_;
};
UniqueNameFrameAdapter unique_name_frame_adapter_;
blink::UniqueNameHelper unique_name_helper_;
bool in_frame_tree_;
blink::LocalFrameToken frame_token_;
const int process_label_id_;
base::flat_map<std::string, bool> history_subframe_unique_names_;
base::ObserverList<RenderFrameObserver>::Unchecked observers_;
NewFeatureUsageCallback new_feature_usage_callback_;
SubresourceLoadCallback subresource_load_callback_;
LoadFromMemoryCacheCallback load_from_memory_cache_callback_;
DidStartResponseCallback did_start_response_callback_;
DidCompleteResponseCallback did_complete_response_callback_;
DidCancelResponseCallback did_cancel_response_callback_;
std::u16string selection_text_;
size_t selection_text_offset_;
gfx::Range selection_range_;
std::unique_ptr<blink::WebMediaStreamDeviceObserver>
web_media_stream_device_observer_;
mojo::Remote<blink::mojom::RendererAudioInputStreamFactory>
audio_input_stream_factory_;
std::unique_ptr<MediaPermissionDispatcher> media_permission_dispatcher_;
service_manager::BinderRegistry registry_;
std::unique_ptr<BlinkInterfaceRegistryImpl> blink_interface_registry_;
mojo::PendingRemote<blink::mojom::BrowserInterfaceBroker>
mojo_js_interface_broker_;
std::unique_ptr<RenderAccessibilityManager> render_accessibility_manager_;
std::unique_ptr<blink::WeakWrapperResourceLoadInfoNotifier>
weak_wrapper_resource_load_info_notifier_;
base::SequenceBound<content::LocalResourceURLLoaderFactory>
local_resource_loader_;
using AutoplayOriginAndFlags = std::pair<url::Origin, int32_t>;
AutoplayOriginAndFlags autoplay_flags_;
mojo::AssociatedReceiver<blink::mojom::AutoplayConfigurationClient>
autoplay_configuration_receiver_{this};
mojo::PendingAssociatedReceiver<mojom::Frame> pending_frame_receiver_;
mojo::AssociatedReceiver<mojom::Frame> frame_receiver_{this};
mojo::AssociatedReceiver<mojom::FrameBindingsControl>
frame_bindings_control_receiver_{this};
mojo::AssociatedReceiver<mojom::MhtmlFileWriter> mhtml_file_writer_receiver_{
this};
std::unique_ptr<NavigationClient> navigation_client_impl_;
ArkwebMediaFactoryExt media_factory_;
blink::AssociatedInterfaceRegistry associated_interfaces_;
mojo::PendingAssociatedRemote<blink::mojom::AssociatedInterfaceProvider>
pending_associated_interface_provider_remote_;
std::unique_ptr<blink::AssociatedInterfaceProvider>
remote_associated_interfaces_;
bool is_requesting_navigation_ = false;
bool had_started_any_navigation_ = false;
BindingsPolicySet enabled_bindings_;
bool enable_mojo_js_bindings_ = false;
content::mojom::ExtraMojoJsFeaturesPtr mojo_js_features_;
mojo::AssociatedRemote<mojom::FrameHost> frame_host_remote_;
mojo::ReceiverSet<service_manager::mojom::InterfaceProvider>
interface_provider_receivers_;
mojo::ReceiverSet<blink::mojom::ResourceLoadInfoNotifier>
resource_load_info_notifier_receivers_;
scoped_refptr<blink::ChildURLLoaderFactoryBundle> loader_factories_;
scoped_refptr<blink::ChildURLLoaderFactoryBundle> pending_loader_factories_;
scoped_refptr<blink::WebBackgroundResourceFetchAssets>
background_resource_fetch_context_;
scoped_refptr<base::SequencedTaskRunner>
background_resource_fetch_task_runner_;
mojo::PendingRemote<blink::mojom::CodeCacheHost> pending_code_cache_host_;
mojo::PendingRemote<blink::mojom::CodeCacheHost>
pending_code_cache_host_for_background_;
mojom::CookieManagerInfoPtr pending_cookie_manager_info_;
mojom::StorageInfoPtr pending_storage_info_;
blink::StorageKey original_storage_key_;
std::optional<base::UnguessableToken> overlay_routing_token_;
base::UnguessableToken devtools_frame_token_;
bool want_error_message_stack_trace_ = false;
std::optional<gfx::Rect> main_frame_intersection_rect_;
std::optional<gfx::Rect> main_frame_viewport_rect_;
std::unique_ptr<blink::WebSocketHandshakeThrottleProvider>
websocket_handshake_throttle_provider_;
RenderFrameMediaPlaybackOptions renderer_media_playback_options_;
class MHTMLBodyLoaderClient;
std::unique_ptr<MHTMLBodyLoaderClient> mhtml_body_loader_client_;
scoped_refptr<network::SharedURLLoaderFactory>
url_loader_factory_override_for_test_;
enum class NavigationCommitState {
kInitialEmptyDocument,
kNone,
kWillCommit,
kDidCommit,
};
enum MayReplaceInitialEmptyDocumentTag {
kMayReplaceInitialEmptyDocument,
};
class CONTENT_EXPORT AssertNavigationCommits {
public:
explicit AssertNavigationCommits(RenderFrameImpl* frame);
explicit AssertNavigationCommits(RenderFrameImpl* frame,
MayReplaceInitialEmptyDocumentTag);
~AssertNavigationCommits();
private:
explicit AssertNavigationCommits(
RenderFrameImpl* frame,
bool allow_transition_from_initial_empty_document);
const base::WeakPtr<RenderFrameImpl> frame_;
};
NavigationCommitState navigation_commit_state_ =
NavigationCommitState::kInitialEmptyDocument;
base::OneShotTimer delayed_state_sync_timer_;
bool send_content_state_immediately_ = false;
ClientNavigationThrottler client_navigation_throttler_;
#if BUILDFLAG(ARKWEB_BLANK_OPTIMIZE)
uint32_t nweb_id_ = 0;
uint64_t blankless_key_ = base::ohos::BlanklessController::INVALID_BLANKLESS_KEY;
uint64_t frame_sink_id_ = 0;
int64_t pref_hash_ = 0;
#endif
#if BUILDFLAG(ARKWEB_USERAGENT)
bool viewport_meta_enabled_{false};
#endif
#if BUILDFLAG(ARKWEB_ARKWEB_EXTENSIONS)
bool is_offscreen_{false};
#endif
raw_ptr<RenderFrameImplUtils> implUtils;
base::WeakPtrFactory<RenderFrameImpl> weak_factory_{this};
};
}
#include "arkweb/chromium_ext/content/renderer/media/ohos/arkweb_media_factory_ext.h"
#endif