mirror of
				https://bitbucket.org/chromiumembedded/cef
				synced 2025-06-05 21:39:12 +02:00 
			
		
		
		
	
		
			
				
	
	
		
			146 lines
		
	
	
		
			6.2 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
			
		
		
	
	
			146 lines
		
	
	
		
			6.2 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
diff --git content/browser/web_contents/web_contents_impl.cc content/browser/web_contents/web_contents_impl.cc
 | 
						|
index df5ea398bdca4..83a5b827f321b 100644
 | 
						|
--- content/browser/web_contents/web_contents_impl.cc
 | 
						|
+++ content/browser/web_contents/web_contents_impl.cc
 | 
						|
@@ -3450,6 +3450,12 @@ void WebContentsImpl::Init(const WebContents::CreateParams& params,
 | 
						|
       params.main_frame_name, GetOpener(), primary_main_frame_policy,
 | 
						|
       base::UnguessableToken::Create());
 | 
						|
 
 | 
						|
+  if (params.view && params.delegate_view) {
 | 
						|
+    view_.reset(params.view);
 | 
						|
+    render_view_host_delegate_view_ = params.delegate_view;
 | 
						|
+  }
 | 
						|
+
 | 
						|
+  if (!view_) {
 | 
						|
   std::unique_ptr<WebContentsViewDelegate> delegate =
 | 
						|
       GetContentClient()->browser()->GetWebContentsViewDelegate(this);
 | 
						|
 
 | 
						|
@@ -3460,6 +3466,7 @@ void WebContentsImpl::Init(const WebContents::CreateParams& params,
 | 
						|
     view_ = CreateWebContentsView(this, std::move(delegate),
 | 
						|
                                   &render_view_host_delegate_view_);
 | 
						|
   }
 | 
						|
+  }
 | 
						|
   CHECK(render_view_host_delegate_view_);
 | 
						|
   CHECK(view_.get());
 | 
						|
 
 | 
						|
@@ -3655,6 +3662,9 @@ void WebContentsImpl::RenderWidgetCreated(
 | 
						|
   OPTIONAL_TRACE_EVENT1("content", "WebContentsImpl::RenderWidgetCreated",
 | 
						|
                         "render_widget_host", render_widget_host);
 | 
						|
   created_widgets_.insert(render_widget_host);
 | 
						|
+
 | 
						|
+  observers_.NotifyObservers(
 | 
						|
+      &WebContentsObserver::RenderWidgetCreated, render_widget_host);
 | 
						|
 }
 | 
						|
 
 | 
						|
 void WebContentsImpl::RenderWidgetDeleted(
 | 
						|
@@ -4460,6 +4470,15 @@ FrameTree* WebContentsImpl::CreateNewWindow(
 | 
						|
     create_params.picture_in_picture_options = *(params.pip_options);
 | 
						|
   }
 | 
						|
 
 | 
						|
+  if (delegate_) {
 | 
						|
+    delegate_->GetCustomWebContentsView(this,
 | 
						|
+                                        params.target_url,
 | 
						|
+                                        render_process_id,
 | 
						|
+                                        opener->GetRoutingID(),
 | 
						|
+                                        &create_params.view,
 | 
						|
+                                        &create_params.delegate_view);
 | 
						|
+  }
 | 
						|
+
 | 
						|
   // Check whether there is an available prerendered page for this navigation if
 | 
						|
   // this is not for guest. If it exists, take WebContents pre-created for
 | 
						|
   // hosting the prerendered page instead of creating new WebContents.
 | 
						|
@@ -8618,6 +8637,9 @@ void WebContentsImpl::SetFocusedFrame(FrameTreeNode* node,
 | 
						|
   }
 | 
						|
 
 | 
						|
   CloseListenerManager::DidChangeFocusedFrame(this);
 | 
						|
+
 | 
						|
+  observers_.NotifyObservers(&WebContentsObserver::OnFrameFocused,
 | 
						|
+                             node->current_frame_host());
 | 
						|
 }
 | 
						|
 
 | 
						|
 void WebContentsImpl::DidCallFocus() {
 | 
						|
diff --git content/public/browser/web_contents.h content/public/browser/web_contents.h
 | 
						|
index 668d0802d8d9f..8fc7836524f42 100644
 | 
						|
--- content/public/browser/web_contents.h
 | 
						|
+++ content/public/browser/web_contents.h
 | 
						|
@@ -99,10 +99,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;
 | 
						|
@@ -249,6 +251,10 @@ class WebContents : public PageNavigator,
 | 
						|
     network::mojom::WebSandboxFlags starting_sandbox_flags =
 | 
						|
         network::mojom::WebSandboxFlags::kNone;
 | 
						|
 
 | 
						|
+    // Optionally specify the view and delegate view.
 | 
						|
+    content::WebContentsView* view = nullptr;
 | 
						|
+    content::RenderViewHostDelegateView* delegate_view = nullptr;
 | 
						|
+
 | 
						|
     // 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 4b32bf8ccc4ed..a0c43926070aa 100644
 | 
						|
--- content/public/browser/web_contents_delegate.h
 | 
						|
+++ content/public/browser/web_contents_delegate.h
 | 
						|
@@ -60,9 +60,11 @@ class EyeDropperListener;
 | 
						|
 class FileSelectListener;
 | 
						|
 class JavaScriptDialogManager;
 | 
						|
 class RenderFrameHost;
 | 
						|
+class RenderViewHostDelegateView;
 | 
						|
 class RenderWidgetHost;
 | 
						|
 class SessionStorageNamespace;
 | 
						|
 class SiteInstance;
 | 
						|
+class WebContentsView;
 | 
						|
 struct ContextMenuParams;
 | 
						|
 struct DropData;
 | 
						|
 struct MediaPlayerWatchTime;
 | 
						|
@@ -345,6 +347,14 @@ class CONTENT_EXPORT WebContentsDelegate {
 | 
						|
       const StoragePartitionConfig& partition_config,
 | 
						|
       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 a3b5e3b1ad2df..c85cb62b01cc2 100644
 | 
						|
--- content/public/browser/web_contents_observer.h
 | 
						|
+++ content/public/browser/web_contents_observer.h
 | 
						|
@@ -225,6 +225,9 @@ class CONTENT_EXPORT WebContentsObserver : public base::CheckedObserver {
 | 
						|
   virtual void OnCaptureHandleConfigUpdate(
 | 
						|
       const blink::mojom::CaptureHandleConfig& config) {}
 | 
						|
 
 | 
						|
+  // This method is invoked when a RenderWidget is created.
 | 
						|
+  virtual void RenderWidgetCreated(RenderWidgetHost* render_widget_host) {}
 | 
						|
+
 | 
						|
   // This method is invoked when the `blink::WebView` of the current
 | 
						|
   // RenderViewHost is ready, e.g. because we recreated it after a crash.
 | 
						|
   virtual void RenderViewReady() {}
 | 
						|
@@ -840,6 +843,10 @@ class CONTENT_EXPORT WebContentsObserver : public base::CheckedObserver {
 | 
						|
   // 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
 |