Only apply transform when outermost != outer WebContents.

In applying the fix for Issue 1002598, we changed behaviour by
transforming coordinates for the case where outer and outer-most
WebContents are the same, and this seems to cause Issue 1015298.
This CL makes it so we only transform when there are different
outer and outer-most WebContents.

Bug: 1015298
Change-Id: I390bf37ca72cdfb5a2596721046e2c9937496df1
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1879597
Commit-Queue: James MacLean <[email protected]>
Reviewed-by: Alex Moshchuk <[email protected]>
Cr-Commit-Position: refs/heads/master@{#709924}
diff --git a/content/browser/web_contents/web_contents_impl.cc b/content/browser/web_contents/web_contents_impl.cc
index f82a5fd1..97f3508 100644
--- a/content/browser/web_contents/web_contents_impl.cc
+++ b/content/browser/web_contents/web_contents_impl.cc
@@ -3077,12 +3077,22 @@
     return;
 
   // GetOutermostWebContents() returns |this| if there are no outer WebContents.
+  auto* outer_web_contents = GetOuterWebContents();
+  auto* outermost_web_contents = GetOutermostWebContents();
   RenderWidgetHostView* view =
-      GetOutermostWebContents()->GetRenderWidgetHostView();
+      outermost_web_contents->GetRenderWidgetHostView();
+  // It's not entirely obvious why we need the transform only in the case where
+  // the outer webcontents is not the same as the outermost webcontents. It may
+  // be due to the fact that oopifs that are children of the mainframe get
+  // correct values for their screenrects, but deeper cross-process frames do
+  // not. Hopefully this can be resolved with https://crbug.com/928825.
+  // Handling these cases separately is needed for http://crbug.com/1015298.
+  bool needs_transform = this != outermost_web_contents &&
+                         outermost_web_contents != outer_web_contents;
 
   gfx::Rect transformed_rect(initial_rect);
   RenderWidgetHostView* this_view = GetRenderWidgetHostView();
-  if (this_view != view) {
+  if (needs_transform) {
     // We need to transform the coordinates of initial_rect.
     gfx::Point origin =
         this_view->TransformPointToRootCoordSpace(initial_rect.origin());