Index: content/renderer/render_frame_impl.cc |
diff --git a/content/renderer/render_frame_impl.cc b/content/renderer/render_frame_impl.cc |
index d895fbe659d9a3eae613fcfb39e56ecbc03c393f..847af290e01563ab52b6c9297d7f6e0864fdb910 100644 |
--- a/content/renderer/render_frame_impl.cc |
+++ b/content/renderer/render_frame_impl.cc |
@@ -1122,6 +1122,7 @@ RenderFrameImpl::RenderFrameImpl(const CreateParams& params) |
focused_pepper_plugin_(nullptr), |
pepper_last_mouse_event_target_(nullptr), |
#endif |
+ engagement_binding_(this), |
frame_binding_(this), |
host_zoom_binding_(this), |
has_accessed_initial_document_(false), |
@@ -1640,8 +1641,13 @@ void RenderFrameImpl::OnNavigate( |
std::unique_ptr<StreamOverrideParameters>()); |
} |
-void RenderFrameImpl::Bind(mojom::FrameRequest request, |
- mojom::FrameHostPtr host) { |
+void RenderFrameImpl::BindEngagement( |
+ blink::mojom::EngagementClientAssociatedRequest request) { |
+ engagement_binding_.Bind(std::move(request)); |
+} |
+ |
+void RenderFrameImpl::BindFrame(mojom::FrameRequest request, |
+ mojom::FrameHostPtr host) { |
frame_binding_.Bind(std::move(request)); |
frame_host_ = std::move(host); |
frame_host_->GetInterfaceProvider( |
@@ -2647,6 +2653,20 @@ bool RenderFrameImpl::IsPasting() const { |
return is_pasting_; |
} |
+// blink::mojom::EngagementClient implementation ------------------------------- |
+ |
+void RenderFrameImpl::SetEngagementLevel(const url::Origin& origin, |
+ blink::mojom::EngagementLevel level) { |
+ // Set the engagement level on |frame_| if its origin matches the one we have |
+ // been provided with. |
+ if (frame_ && url::Origin(frame_->getSecurityOrigin()) == origin) { |
+ frame_->setEngagementLevel(level); |
+ return; |
+ } |
+ |
+ engagement_levels_[origin] = level; |
+} |
+ |
// mojom::Frame implementation ------------------------------------------------- |
void RenderFrameImpl::GetInterfaceProvider( |
@@ -4758,6 +4778,14 @@ void RenderFrameImpl::SendDidCommitProvisionalLoad( |
InternalDocumentStateData* internal_data = |
InternalDocumentStateData::FromDocumentState(document_state); |
+ // Set the correct engagement level on the frame. |
+ EngagementLevels::iterator engagement_level = |
+ engagement_levels_.find(url::Origin(frame_->getSecurityOrigin())); |
+ |
+ if (engagement_level != engagement_levels_.end()) |
+ frame_->setEngagementLevel(engagement_level->second); |
+ engagement_levels_.clear(); |
+ |
FrameHostMsg_DidCommitProvisionalLoad_Params params; |
params.http_status_code = response.httpStatusCode(); |
params.url_is_unreachable = ds->hasUnreachableURL(); |
@@ -6511,6 +6539,9 @@ void RenderFrameImpl::HandlePepperImeCommit(const base::string16& text) { |
#endif // ENABLE_PLUGINS |
void RenderFrameImpl::RegisterMojoInterfaces() { |
+ GetAssociatedInterfaceRegistry()->AddInterface( |
+ base::Bind(&RenderFrameImpl::BindEngagement, weak_factory_.GetWeakPtr())); |
+ |
if (!frame_->parent()) { |
// Only main frame have ImageDownloader service. |
GetInterfaceRegistry()->AddInterface(base::Bind( |