Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2210)

Unified Diff: content/renderer/render_frame_impl.cc

Issue 2535483002: Plumb site engagement to the renderer process. (Closed)
Patch Set: Rebase. Fix Win compile Created 4 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: content/renderer/render_frame_impl.cc
diff --git a/content/renderer/render_frame_impl.cc b/content/renderer/render_frame_impl.cc
index 26d6d9c10ec419a973039f8cc330727dbccfc064..aab48006939db316fb35527142ec26c214c4b9e1 100644
--- a/content/renderer/render_frame_impl.cc
+++ b/content/renderer/render_frame_impl.cc
@@ -1104,8 +1104,10 @@ 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),
+ engagement_level_(blink::mojom::EngagementLevel::NONE),
has_accessed_initial_document_(false),
weak_factory_(this) {
// We don't have a service_manager::Connection at this point, so use empty
@@ -1628,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(
@@ -2645,6 +2652,22 @@ bool RenderFrameImpl::IsPasting() const {
return is_pasting_;
}
+// blink::mojom::EngagementClient implementation -------------------------------
+
+void RenderFrameImpl::SetEngagementLevel(blink::mojom::EngagementLevel level) {
+ engagement_level_ = level;
+
+ // Set the engagement level on |frame_| if we have committed the current
+ // navigation. Otherwise, it will be set in didCommitProvisionalLoad.
+ if (!frame_ || !frame_->dataSource())
+ return;
+
+ NavigationStateImpl* navigation_state = static_cast<NavigationStateImpl*>(
+ DocumentState::FromDataSource(frame_->dataSource())->navigation_state());
+ if (navigation_state->request_committed())
+ frame_->setEngagementLevel(level);
+}
+
// mojom::Frame implementation -------------------------------------------------
void RenderFrameImpl::GetInterfaceProvider(
@@ -3570,6 +3593,9 @@ void RenderFrameImpl::didCommitProvisionalLoad(
}
}
+ // Ensure the frame has the correct engagement level before the load begins.
+ frame_->setEngagementLevel(engagement_level_);
nasko 2016/11/28 19:18:08 I would feel more comfortable if this is only set
dominickn 2016/11/29 07:41:22 Done.
+
// For new page navigations, the browser process needs to be notified of the
// first paint of that page, so it can cancel the timer that waits for it.
if (is_main_frame_ && !navigation_state->WasWithinSamePage()) {
@@ -6481,6 +6507,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(

Powered by Google App Engine
This is Rietveld 408576698