Don't process RenderFrameProxy callbacks on undead RenderWidgets.

The member |render_frame_proxies_| on RenderWidget is used to propagate visual
properties down the frame tree [across processes]. This should not need to be
triggered from undead RenderWidgets [which in the future will not exist at all].
This CL stops sending these observer callbacks from undead RenderWidgets.

Change-Id: Idfe0b14d3ce7deca879a3d2106159aba7dea4221
Bug: 912193
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1804690
Commit-Queue: Avi Drissman <[email protected]>
Reviewed-by: Avi Drissman <[email protected]>
Auto-Submit: Erik Chen <[email protected]>
Cr-Commit-Position: refs/heads/master@{#698252}
diff --git a/content/renderer/render_widget.cc b/content/renderer/render_widget.cc
index f100cb0c..33bb95b 100644
--- a/content/renderer/render_widget.cc
+++ b/content/renderer/render_widget.cc
@@ -922,9 +922,11 @@
         // (such as in RenderViewHost) and distribute it to each frame-hosted
         // RenderWidget from there.
         for (auto& child_proxy : render_frame_proxies_) {
-          child_proxy.OnPageScaleFactorChanged(
-              visual_properties.page_scale_factor,
-              visual_properties.is_pinch_gesture_active);
+          if (!is_undead_) {
+            child_proxy.OnPageScaleFactorChanged(
+                visual_properties.page_scale_factor,
+                visual_properties.is_pinch_gesture_active);
+          }
         }
       }
     }
@@ -1698,6 +1700,7 @@
 }
 
 void RenderWidget::UpdateZoom(double zoom_level) {
+  DCHECK(!is_undead_);
   blink::WebFrameWidget* frame_widget = GetFrameWidget();
   if (!frame_widget)
     return;
@@ -1713,7 +1716,6 @@
 
   for (auto& observer : render_frame_proxies_)
     observer.OnZoomLevelChanged(zoom_level);
-
   for (auto& plugin : browser_plugins_)
     plugin.OnZoomLevelChanged(zoom_level);
 }
@@ -2303,8 +2305,10 @@
     OnOrientationChange();
 
   if (previous_original_screen_info != GetOriginalScreenInfo()) {
-    for (auto& observer : render_frame_proxies_)
-      observer.OnScreenInfoChanged(GetOriginalScreenInfo());
+    for (auto& observer : render_frame_proxies_) {
+      if (!is_undead_)
+        observer.OnScreenInfoChanged(GetOriginalScreenInfo());
+    }
 
     // Notify all embedded BrowserPlugins of the updated ScreenInfo.
     for (auto& observer : browser_plugins_)
@@ -3416,8 +3420,10 @@
   // the message to their child RenderWidgets (through their proxy child
   // frames).
   for (auto& observer : render_frame_proxies_) {
-    observer.OnPageScaleFactorChanged(page_scale_factor,
-                                      is_pinch_gesture_active);
+    if (!is_undead_) {
+      observer.OnPageScaleFactorChanged(page_scale_factor,
+                                        is_pinch_gesture_active);
+    }
   }
   // Store the value to give to any new RenderFrameProxy that is registered.
   page_scale_factor_from_mainframe_ = page_scale_factor;