Mac: Attach Extension NSViews to the view hierarchy before creating renderers
Extensions with background pages (e.g. Google Cast) currently have a shorter code path when showing an extension popup that can cause the renderer to ask for screen metrics before the hosting NSView is added to the view hierarchy. Since the NSWindow is nil in this case, screen metrics for the primary screen are used, and they may be the incorrect screen for the popup. On non-Mac, toolkit-views platforms get around this problem by deferring creation until View::ViewHierarchyChanged is triggered. However, there is no NSView apart from the render view on the extension-side on Mac, so to do the same we'd either need to add one (and keep it sized appropriately), or modify the WebContents view itself to override [NSView viewDid/WillMoveToSuperview] and feed it through to embedders. Instead, this CL tweaks the ExtensionPopupController initialization to always create the popup NSWindow (initially hidden), before creating the ExtensionViewHost. BUG=324748, 305620 TEST=On a retina mac, plug in a (non-retina) external monitor, move Chrome there, and open the Chromecast dialog. It should look "nice" (not as nice as the retina screen, but consistent with other text in Chrome). See http://crbug.com/324748#c41 Review URL: https://codereview.chromium.org/653843002 Cr-Commit-Position: refs/heads/master@{#317011}
Showing
Please register or sign in to comment