Chromium Code Reviews| Index: content/renderer/render_frame_impl.cc |
| diff --git a/content/renderer/render_frame_impl.cc b/content/renderer/render_frame_impl.cc |
| index 00f17b47be2c3ea857ea9936a7d166eba36af23f..a35d221634d029542948a69adcde64ec3daf7d08 100644 |
| --- a/content/renderer/render_frame_impl.cc |
| +++ b/content/renderer/render_frame_impl.cc |
| @@ -1105,6 +1105,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), |
| @@ -1629,8 +1630,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( |
| @@ -2646,6 +2652,20 @@ bool RenderFrameImpl::IsPasting() const { |
| return is_pasting_; |
| } |
| +// blink::mojom::EngagementClient implementation ------------------------------- |
| + |
| +void RenderFrameImpl::SetEngagementLevel(const url::Origin& origin, |
|
esprehn
2016/12/06 00:31:34
Why do you need to pass an origin? If you connect
dominickn
2016/12/06 00:49:57
nasko suggested passing the origin here like the H
nasko
2016/12/06 00:50:30
Because a single frame can render multiple origins
esprehn
2016/12/06 00:58:44
Right, but that's true of all things using the Ser
dominickn
2016/12/08 02:37:10
USB doesn't need to request a permission prior to
nasko
2016/12/08 22:26:48
If your Mojo interface is bound to the lifetime of
|
| + 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( |
| @@ -4732,6 +4752,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); |
|
esprehn
2016/12/06 00:31:34
This seems like something we should be able to man
dominickn
2016/12/06 00:49:57
See comment below regarding this being sent pre-co
|
| + engagement_levels_.clear(); |
|
dcheng
2016/12/08 08:14:07
Out of curiosity... why do we need to maintain a m
dominickn
2016/12/08 09:02:47
I implemented it analogously to the HostZoom featu
|
| + |
| FrameHostMsg_DidCommitProvisionalLoad_Params params; |
| params.http_status_code = response.httpStatusCode(); |
| params.url_is_unreachable = ds->hasUnreachableURL(); |
| @@ -6484,6 +6512,9 @@ void RenderFrameImpl::HandlePepperImeCommit(const base::string16& text) { |
| #endif // ENABLE_PLUGINS |
| void RenderFrameImpl::RegisterMojoInterfaces() { |
| + GetAssociatedInterfaceRegistry()->AddInterface( |
| + base::Bind(&RenderFrameImpl::BindEngagement, weak_factory_.GetWeakPtr())); |
|
esprehn
2016/12/06 00:31:34
You should be able to connect to this interface di
dominickn
2016/12/06 00:49:57
I'm not sure what you mean. The IPC from the brows
nasko
2016/12/08 22:26:48
It doesn't strictly need to be a map, but it needs
|
| + |
| if (!frame_->parent()) { |
| // Only main frame have ImageDownloader service. |
| GetInterfaceRegistry()->AddInterface(base::Bind( |