| 
									
										
										
										
											2021-07-02 09:56:29 +09:00
										 |  |  | From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 | 
					
						
							|  |  |  | From: Cheng Zhao <zcbenz@gmail.com> | 
					
						
							|  |  |  | Date: Thu, 4 Oct 2018 14:57:02 -0700 | 
					
						
							|  |  |  | Subject: fix: also propagate fullscreen state for outer frame | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | When entering fullscreen with Element.requestFullscreen in child frames, | 
					
						
							|  |  |  | the parent frame should also enter fullscreen mode too. Chromium handles | 
					
						
							|  |  |  | this for iframes, but not for webviews as they are essentially main | 
					
						
							|  |  |  | frames instead of child frames. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | This patch makes webviews propagate the fullscreen state to embedder. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Note that we also need to manually update embedder's | 
					
						
							|  |  |  | `api::WebContents::IsFullscreenForTabOrPending` value. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | diff --git a/content/browser/renderer_host/render_frame_host_impl.cc b/content/browser/renderer_host/render_frame_host_impl.cc
 | 
					
						
							| 
									
										
										
										
											2021-08-23 20:52:17 -04:00
										 |  |  | index b5f7104ffde611652c55ebe85e3969394dbf76fc..1001c3c9e486ba17466d23168ad7df6aecc8eeee 100644
 | 
					
						
							| 
									
										
										
										
											2021-07-02 09:56:29 +09:00
										 |  |  | --- a/content/browser/renderer_host/render_frame_host_impl.cc
 | 
					
						
							|  |  |  | +++ b/content/browser/renderer_host/render_frame_host_impl.cc
 | 
					
						
							| 
									
										
										
										
											2021-08-23 20:52:17 -04:00
										 |  |  | @@ -5771,6 +5771,15 @@ void RenderFrameHostImpl::EnterFullscreen(
 | 
					
						
							| 
									
										
										
										
											2021-07-02 09:56:29 +09:00
										 |  |  |      notified_instances.insert(parent_site_instance); | 
					
						
							|  |  |  |    } | 
					
						
							|  |  |  |   | 
					
						
							|  |  |  | +  // Entering fullscreen from webview should also notify its outer frame.
 | 
					
						
							|  |  |  | +  if (frame_tree_node()->render_manager()->IsMainFrameForInnerDelegate()) {
 | 
					
						
							|  |  |  | +    RenderFrameProxyHost* outer_proxy =
 | 
					
						
							|  |  |  | +        frame_tree_node()->render_manager()->GetProxyToOuterDelegate();
 | 
					
						
							|  |  |  | +    DCHECK(outer_proxy);
 | 
					
						
							|  |  |  | +    outer_proxy->GetAssociatedRemoteFrame()->WillEnterFullscreen(
 | 
					
						
							|  |  |  | +        options.Clone());
 | 
					
						
							|  |  |  | +  }
 | 
					
						
							|  |  |  | +
 | 
					
						
							|  |  |  |    delegate_->EnterFullscreenMode(this, *options); | 
					
						
							|  |  |  |    delegate_->FullscreenStateChanged(this, true /* is_fullscreen */, | 
					
						
							|  |  |  |                                      std::move(options)); |