mirror of
				https://bitbucket.org/chromiumembedded/cef
				synced 2025-06-05 21:39:12 +02:00 
			
		
		
		
	Known issues: - Windows ARM64 builds are currently failing due to https://crbug.com/1242884#c31
		
			
				
	
	
		
			139 lines
		
	
	
		
			5.8 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
			
		
		
	
	
			139 lines
		
	
	
		
			5.8 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
diff --git content/browser/web_contents/web_contents_impl.cc content/browser/web_contents/web_contents_impl.cc
 | 
						|
index 55a636ca71a25..41dcccd02b4fa 100644
 | 
						|
--- content/browser/web_contents/web_contents_impl.cc
 | 
						|
+++ content/browser/web_contents/web_contents_impl.cc
 | 
						|
@@ -2881,6 +2881,12 @@ void WebContentsImpl::Init(const WebContents::CreateParams& params) {
 | 
						|
   frame_tree_.Init(site_instance.get(), params.renderer_initiated_creation,
 | 
						|
                    params.main_frame_name);
 | 
						|
 
 | 
						|
+  if (params.view && params.delegate_view) {
 | 
						|
+    view_.reset(params.view);
 | 
						|
+    render_view_host_delegate_view_ = params.delegate_view;
 | 
						|
+  }
 | 
						|
+
 | 
						|
+  if (!view_) {
 | 
						|
   WebContentsViewDelegate* delegate =
 | 
						|
       GetContentClient()->browser()->GetWebContentsViewDelegate(this);
 | 
						|
 
 | 
						|
@@ -2891,6 +2897,7 @@ void WebContentsImpl::Init(const WebContents::CreateParams& params) {
 | 
						|
     view_.reset(CreateWebContentsView(this, delegate,
 | 
						|
                                       &render_view_host_delegate_view_));
 | 
						|
   }
 | 
						|
+  }
 | 
						|
   CHECK(render_view_host_delegate_view_);
 | 
						|
   CHECK(view_.get());
 | 
						|
 
 | 
						|
@@ -3713,6 +3720,15 @@ FrameTree* WebContentsImpl::CreateNewWindow(
 | 
						|
   // objects.
 | 
						|
   create_params.renderer_initiated_creation = !is_new_browsing_instance;
 | 
						|
 
 | 
						|
+  if (delegate_) {
 | 
						|
+    delegate_->GetCustomWebContentsView(this,
 | 
						|
+                                        params.target_url,
 | 
						|
+                                        render_process_id,
 | 
						|
+                                        opener->GetRoutingID(),
 | 
						|
+                                        &create_params.view,
 | 
						|
+                                        &create_params.delegate_view);
 | 
						|
+  }
 | 
						|
+
 | 
						|
   std::unique_ptr<WebContentsImpl> new_contents;
 | 
						|
   if (!is_guest) {
 | 
						|
     create_params.context = view_->GetNativeView();
 | 
						|
@@ -7500,6 +7516,9 @@ void WebContentsImpl::SetFocusedFrame(FrameTreeNode* node,
 | 
						|
     // This is an outermost WebContents.
 | 
						|
     SetAsFocusedWebContentsIfNecessary();
 | 
						|
   }
 | 
						|
+
 | 
						|
+  observers_.NotifyObservers(&WebContentsObserver::OnFrameFocused,
 | 
						|
+                             node->current_frame_host());
 | 
						|
 }
 | 
						|
 
 | 
						|
 void WebContentsImpl::DidCallFocus() {
 | 
						|
diff --git content/public/browser/web_contents.cc content/public/browser/web_contents.cc
 | 
						|
index e40e14fd4913f..2ca3b08277e3d 100644
 | 
						|
--- content/public/browser/web_contents.cc
 | 
						|
+++ content/public/browser/web_contents.cc
 | 
						|
@@ -29,6 +29,7 @@ WebContents::CreateParams::CreateParams(BrowserContext* context,
 | 
						|
       renderer_initiated_creation(false),
 | 
						|
       desired_renderer_state(kOkayToHaveRendererProcess),
 | 
						|
       starting_sandbox_flags(network::mojom::WebSandboxFlags::kNone),
 | 
						|
+      delegate_view(nullptr),
 | 
						|
       is_never_visible(false) {}
 | 
						|
 
 | 
						|
 WebContents::CreateParams::CreateParams(const CreateParams& other) = default;
 | 
						|
diff --git content/public/browser/web_contents.h content/public/browser/web_contents.h
 | 
						|
index aa3ecdb440db8..bedc9eee352f0 100644
 | 
						|
--- content/public/browser/web_contents.h
 | 
						|
+++ content/public/browser/web_contents.h
 | 
						|
@@ -86,10 +86,12 @@ class BrowserContext;
 | 
						|
 class BrowserPluginGuestDelegate;
 | 
						|
 class RenderFrameHost;
 | 
						|
 class RenderViewHost;
 | 
						|
+class RenderViewHostDelegateView;
 | 
						|
 class RenderWidgetHostView;
 | 
						|
 class ScreenOrientationDelegate;
 | 
						|
 class SiteInstance;
 | 
						|
 class WebContentsDelegate;
 | 
						|
+class WebContentsView;
 | 
						|
 class WebUI;
 | 
						|
 struct DropData;
 | 
						|
 struct MHTMLGenerationParams;
 | 
						|
@@ -222,6 +224,10 @@ class WebContents : public PageNavigator,
 | 
						|
     // Sandboxing flags set on the new WebContents.
 | 
						|
     network::mojom::WebSandboxFlags starting_sandbox_flags;
 | 
						|
 
 | 
						|
+    // Optionally specify the view and delegate view.
 | 
						|
+    content::WebContentsView* view;
 | 
						|
+    content::RenderViewHostDelegateView* delegate_view;
 | 
						|
+
 | 
						|
     // Value used to set the last time the WebContents was made active, this is
 | 
						|
     // the value that'll be returned by GetLastActiveTime(). If this is left
 | 
						|
     // default initialized then the value is not passed on to the WebContents
 | 
						|
diff --git content/public/browser/web_contents_delegate.h content/public/browser/web_contents_delegate.h
 | 
						|
index a0da74d5cbe4a..1d6e4673a610f 100644
 | 
						|
--- content/public/browser/web_contents_delegate.h
 | 
						|
+++ content/public/browser/web_contents_delegate.h
 | 
						|
@@ -59,10 +59,12 @@ class EyeDropperListener;
 | 
						|
 class FileSelectListener;
 | 
						|
 class JavaScriptDialogManager;
 | 
						|
 class RenderFrameHost;
 | 
						|
+class RenderViewHostDelegateView;
 | 
						|
 class RenderWidgetHost;
 | 
						|
 class SessionStorageNamespace;
 | 
						|
 class SiteInstance;
 | 
						|
 class WebContentsImpl;
 | 
						|
+class WebContentsView;
 | 
						|
 struct ContextMenuParams;
 | 
						|
 struct DropData;
 | 
						|
 struct MediaPlayerWatchTime;
 | 
						|
@@ -335,6 +337,14 @@ class CONTENT_EXPORT WebContentsDelegate {
 | 
						|
       const StoragePartitionId& partition_id,
 | 
						|
       SessionStorageNamespace* session_storage_namespace);
 | 
						|
 
 | 
						|
+  virtual void GetCustomWebContentsView(
 | 
						|
+      WebContents* web_contents,
 | 
						|
+      const GURL& target_url,
 | 
						|
+      int opener_render_process_id,
 | 
						|
+      int opener_render_frame_id,
 | 
						|
+      content::WebContentsView** view,
 | 
						|
+      content::RenderViewHostDelegateView** delegate_view) {}
 | 
						|
+
 | 
						|
   // Notifies the delegate about the creation of a new WebContents. This
 | 
						|
   // typically happens when popups are created.
 | 
						|
   virtual void WebContentsCreated(WebContents* source_contents,
 | 
						|
diff --git content/public/browser/web_contents_observer.h content/public/browser/web_contents_observer.h
 | 
						|
index d6f20a6c8d283..8cd985c25196b 100644
 | 
						|
--- content/public/browser/web_contents_observer.h
 | 
						|
+++ content/public/browser/web_contents_observer.h
 | 
						|
@@ -705,6 +705,10 @@ class CONTENT_EXPORT WebContentsObserver {
 | 
						|
   // WebContents has gained/lost focus.
 | 
						|
   virtual void OnFocusChangedInPage(FocusedNodeDetails* details) {}
 | 
						|
 
 | 
						|
+  // Notification that |render_frame_host| for this WebContents has gained
 | 
						|
+  // focus.
 | 
						|
+  virtual void OnFrameFocused(RenderFrameHost* render_frame_host) {}
 | 
						|
+
 | 
						|
   // Notifies that the manifest URL for the main frame changed to
 | 
						|
   // |manifest_url|. This will be invoked when a document with a manifest loads
 | 
						|
   // or when the manifest URL changes (possibly to nothing). It is not invoked
 |