| Index: content/renderer/render_frame_impl.cc
|
| diff --git a/content/renderer/render_frame_impl.cc b/content/renderer/render_frame_impl.cc
|
| index 71213fce8182bc921564fdfe5a70ff0f05004e79..3457a0fe969b0ebd384f2bd29725fd824ca3cdc7 100644
|
| --- a/content/renderer/render_frame_impl.cc
|
| +++ b/content/renderer/render_frame_impl.cc
|
| @@ -140,6 +140,7 @@
|
| #include "content/renderer/stats_collection_controller.h"
|
| #include "content/renderer/web_frame_utils.h"
|
| #include "content/renderer/web_ui_extension.h"
|
| +#include "content/renderer/web_ui_extension_data.h"
|
| #include "crypto/sha2.h"
|
| #include "gin/modules/console.h"
|
| #include "gin/modules/module_registry.h"
|
| @@ -1129,6 +1130,7 @@ RenderFrameImpl::RenderFrameImpl(const CreateParams& params)
|
| engagement_binding_(this),
|
| frame_binding_(this),
|
| host_zoom_binding_(this),
|
| + frame_bindings_control_binding_(this),
|
| has_accessed_initial_document_(false),
|
| weak_factory_(this) {
|
| // We don't have a service_manager::Connection at this point, so use empty
|
| @@ -1249,8 +1251,6 @@ void RenderFrameImpl::Initialize() {
|
| "parent", parent_id);
|
| }
|
|
|
| - MaybeEnableMojoBindings();
|
| -
|
| #if BUILDFLAG(ENABLE_PLUGINS)
|
| new PepperBrowserConnection(this);
|
| #endif
|
| @@ -1282,6 +1282,13 @@ void RenderFrameImpl::Initialize() {
|
| DCHECK(render_view_->HasAddedInputHandler());
|
| input_handler_manager->RegisterRoutingID(GetRoutingID());
|
| }
|
| +
|
| + const base::CommandLine& command_line =
|
| + *base::CommandLine::ForCurrentProcess();
|
| + if (command_line.HasSwitch(switches::kDomAutomationController))
|
| + enabled_bindings_ |= BINDINGS_POLICY_DOM_AUTOMATION;
|
| + if (command_line.HasSwitch(switches::kStatsCollectionController))
|
| + enabled_bindings_ |= BINDINGS_POLICY_STATS_COLLECTION;
|
| }
|
|
|
| void RenderFrameImpl::InitializeBlameContext(RenderFrameImpl* parent_frame) {
|
| @@ -1649,6 +1656,11 @@ void RenderFrameImpl::BindFrame(mojom::FrameRequest request,
|
| std::move(pending_remote_interface_provider_request_));
|
| }
|
|
|
| +void RenderFrameImpl::BindFrameBindingsControl(
|
| + mojom::FrameBindingsControlAssociatedRequest request) {
|
| + frame_bindings_control_binding_.Bind(std::move(request));
|
| +}
|
| +
|
| ManifestManager* RenderFrameImpl::manifest_manager() {
|
| return manifest_manager_;
|
| }
|
| @@ -2707,6 +2719,22 @@ void RenderFrameImpl::GetInterfaceProvider(
|
| browser_info.identity, browser_spec);
|
| }
|
|
|
| +void RenderFrameImpl::AllowBindings(int32_t enabled_bindings_flags) {
|
| + if (IsMainFrame() && (enabled_bindings_flags & BINDINGS_POLICY_WEB_UI) &&
|
| + !(enabled_bindings_ & BINDINGS_POLICY_WEB_UI)) {
|
| + // TODO(sammc): Move WebUIExtensionData to be a RenderFrameObserver.
|
| + // WebUIExtensionData deletes itself when |render_view_| is destroyed.
|
| + new WebUIExtensionData(render_view_);
|
| + }
|
| +
|
| + enabled_bindings_ |= enabled_bindings_flags;
|
| +
|
| + // Keep track of the total bindings accumulated in this process.
|
| + RenderProcess::current()->AddBindings(enabled_bindings_flags);
|
| +
|
| + MaybeEnableMojoBindings();
|
| +}
|
| +
|
| // mojom::HostZoom implementation ----------------------------------------------
|
|
|
| void RenderFrameImpl::SetHostZoomLevel(const GURL& url, double zoom_level) {
|
| @@ -3691,15 +3719,13 @@ void RenderFrameImpl::didCreateNewDocument(blink::WebLocalFrame* frame) {
|
| void RenderFrameImpl::didClearWindowObject(blink::WebLocalFrame* frame) {
|
| DCHECK_EQ(frame_, frame);
|
|
|
| - int enabled_bindings = render_view_->GetEnabledBindings();
|
| -
|
| - if (enabled_bindings & BINDINGS_POLICY_WEB_UI)
|
| + if (enabled_bindings_ & BINDINGS_POLICY_WEB_UI)
|
| WebUIExtension::Install(frame);
|
|
|
| - if (enabled_bindings & BINDINGS_POLICY_DOM_AUTOMATION)
|
| + if (enabled_bindings_ & BINDINGS_POLICY_DOM_AUTOMATION)
|
| DomAutomationController::Install(this, frame);
|
|
|
| - if (enabled_bindings & BINDINGS_POLICY_STATS_COLLECTION)
|
| + if (enabled_bindings_ & BINDINGS_POLICY_STATS_COLLECTION)
|
| StatsCollectionController::Install(frame);
|
|
|
| const base::CommandLine& command_line =
|
| @@ -6293,7 +6319,6 @@ void RenderFrameImpl::SendUpdateState() {
|
| }
|
|
|
| void RenderFrameImpl::MaybeEnableMojoBindings() {
|
| - int enabled_bindings = RenderProcess::current()->GetEnabledBindings();
|
| // BINDINGS_POLICY_WEB_UI, BINDINGS_POLICY_MOJO and BINDINGS_POLICY_HEADLESS
|
| // are mutually exclusive. They provide access to Mojo bindings, but do so in
|
| // incompatible ways.
|
| @@ -6303,22 +6328,23 @@ void RenderFrameImpl::MaybeEnableMojoBindings() {
|
| // Make sure that at most one of BINDINGS_POLICY_WEB_UI, BINDINGS_POLICY_MOJO
|
| // and BINDINGS_POLICY_HEADLESS have been set.
|
| // NOTE x & (x - 1) == 0 is true iff x is zero or a power of two.
|
| - DCHECK_EQ((enabled_bindings & kAllBindingsTypes) &
|
| - ((enabled_bindings & kAllBindingsTypes) - 1),
|
| + DCHECK_EQ((enabled_bindings_ & kAllBindingsTypes) &
|
| + ((enabled_bindings_ & kAllBindingsTypes) - 1),
|
| 0);
|
|
|
| + DCHECK_EQ(RenderProcess::current()->GetEnabledBindings(), enabled_bindings_);
|
| +
|
| // If an MojoBindingsController already exists for this RenderFrameImpl, avoid
|
| // creating another one. It is not kept as a member, as it deletes itself when
|
| // the frame is destroyed.
|
| if (RenderFrameObserverTracker<MojoBindingsController>::Get(this))
|
| return;
|
|
|
| - if (IsMainFrame() &&
|
| - enabled_bindings & BINDINGS_POLICY_WEB_UI) {
|
| + if (IsMainFrame() && enabled_bindings_ & BINDINGS_POLICY_WEB_UI) {
|
| new MojoBindingsController(this, MojoBindingsType::FOR_WEB_UI);
|
| - } else if (enabled_bindings & BINDINGS_POLICY_MOJO) {
|
| + } else if (enabled_bindings_ & BINDINGS_POLICY_MOJO) {
|
| new MojoBindingsController(this, MojoBindingsType::FOR_LAYOUT_TESTS);
|
| - } else if (enabled_bindings & BINDINGS_POLICY_HEADLESS) {
|
| + } else if (enabled_bindings_ & BINDINGS_POLICY_HEADLESS) {
|
| new MojoBindingsController(this, MojoBindingsType::FOR_HEADLESS);
|
| }
|
| }
|
| @@ -6593,6 +6619,9 @@ void RenderFrameImpl::RegisterMojoInterfaces() {
|
| GetAssociatedInterfaceRegistry()->AddInterface(
|
| base::Bind(&RenderFrameImpl::BindEngagement, weak_factory_.GetWeakPtr()));
|
|
|
| + GetAssociatedInterfaceRegistry()->AddInterface(base::Bind(
|
| + &RenderFrameImpl::BindFrameBindingsControl, weak_factory_.GetWeakPtr()));
|
| +
|
| if (!frame_->parent()) {
|
| // Only main frame have ImageDownloader service.
|
| GetInterfaceRegistry()->AddInterface(base::Bind(
|
| @@ -6666,6 +6695,10 @@ base::SingleThreadTaskRunner* RenderFrameImpl::GetUnthrottledTaskRunner() {
|
| return GetWebFrame()->unthrottledTaskRunner();
|
| }
|
|
|
| +int RenderFrameImpl::GetEnabledBindings() const {
|
| + return enabled_bindings_;
|
| +}
|
| +
|
| blink::WebPlugin* RenderFrameImpl::GetWebPluginForFind() {
|
| if (frame_->document().isPluginDocument())
|
| return frame_->document().to<WebPluginDocument>().plugin();
|
|
|