mirror of
				https://bitbucket.org/chromiumembedded/cef
				synced 2025-06-05 21:39:12 +02:00 
			
		
		
		
	
		
			
				
	
	
		
			127 lines
		
	
	
		
			5.2 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
			
		
		
	
	
			127 lines
		
	
	
		
			5.2 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
diff --git content/browser/web_contents/web_contents_impl.cc content/browser/web_contents/web_contents_impl.cc
 | 
						|
index 96ced4715eed9..1094a4e9ec0a4 100644
 | 
						|
--- content/browser/web_contents/web_contents_impl.cc
 | 
						|
+++ content/browser/web_contents/web_contents_impl.cc
 | 
						|
@@ -3040,6 +3040,12 @@ void WebContentsImpl::Init(const WebContents::CreateParams& params,
 | 
						|
       site_instance.get(), params.renderer_initiated_creation,
 | 
						|
       params.main_frame_name, GetOriginalOpener(), primary_main_frame_policy);
 | 
						|
 
 | 
						|
+  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);
 | 
						|
 
 | 
						|
@@ -3050,6 +3056,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());
 | 
						|
 
 | 
						|
@@ -3915,6 +3922,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();
 | 
						|
@@ -7726,6 +7742,9 @@ void WebContentsImpl::SetFocusedFrame(FrameTreeNode* node,
 | 
						|
     // frames).
 | 
						|
     SetFocusedFrameTree(node->frame_tree());
 | 
						|
   }
 | 
						|
+
 | 
						|
+  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 ad5c13965f1cc..169a309335ea0 100644
 | 
						|
--- content/public/browser/web_contents.h
 | 
						|
+++ content/public/browser/web_contents.h
 | 
						|
@@ -93,10 +93,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;
 | 
						|
@@ -234,6 +236,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 f889d0bf33cf2..db7a1c6f736ca 100644
 | 
						|
--- content/public/browser/web_contents_delegate.h
 | 
						|
+++ content/public/browser/web_contents_delegate.h
 | 
						|
@@ -57,10 +57,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;
 | 
						|
@@ -339,6 +341,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 b68d706fe204c..173206fcd95f6 100644
 | 
						|
--- content/public/browser/web_contents_observer.h
 | 
						|
+++ content/public/browser/web_contents_observer.h
 | 
						|
@@ -772,6 +772,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
 |