mirror of
				https://bitbucket.org/chromiumembedded/cef
				synced 2025-06-05 21:39:12 +02:00 
			
		
		
		
	
		
			
				
	
	
		
			146 lines
		
	
	
		
			6.3 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
			
		
		
	
	
			146 lines
		
	
	
		
			6.3 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
| diff --git content/browser/web_contents/web_contents_impl.cc content/browser/web_contents/web_contents_impl.cc
 | |
| index 5ff43afce429c..587130d6d4f2a 100644
 | |
| --- content/browser/web_contents/web_contents_impl.cc
 | |
| +++ content/browser/web_contents/web_contents_impl.cc
 | |
| @@ -3830,6 +3830,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);
 | |
|  
 | |
| @@ -3840,6 +3846,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());
 | |
|  
 | |
| @@ -4050,6 +4057,9 @@ void WebContentsImpl::RenderWidgetCreated(
 | |
|                          "render_widget_host", render_widget_host);
 | |
|    CHECK(!created_widgets_.contains(render_widget_host->GetFrameSinkId()));
 | |
|    created_widgets_[render_widget_host->GetFrameSinkId()] = render_widget_host;
 | |
| +
 | |
| +  observers_.NotifyObservers(
 | |
| +      &WebContentsObserver::RenderWidgetCreated, render_widget_host);
 | |
|  }
 | |
|  
 | |
|  void WebContentsImpl::RenderWidgetDeleted(
 | |
| @@ -4963,6 +4973,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.
 | |
| @@ -9622,6 +9641,9 @@ void WebContentsImpl::SetFocusedFrame(FrameTreeNode* node,
 | |
|    }
 | |
|  
 | |
|    CloseListenerManager::DidChangeFocusedFrame(this);
 | |
| +
 | |
| +  observers_.NotifyObservers(&WebContentsObserver::OnFrameFocused,
 | |
| +                             node->current_frame_host());
 | |
|  }
 | |
|  
 | |
|  FrameTree* WebContentsImpl::GetOwnedPictureInPictureFrameTree() {
 | |
| diff --git content/public/browser/web_contents.h content/public/browser/web_contents.h
 | |
| index 5e89cbf0ed5fd..49a6449c46fad 100644
 | |
| --- content/public/browser/web_contents.h
 | |
| +++ content/public/browser/web_contents.h
 | |
| @@ -116,10 +116,12 @@ class BrowserPluginGuestDelegate;
 | |
|  class GuestPageHolder;
 | |
|  class RenderFrameHost;
 | |
|  class RenderViewHost;
 | |
| +class RenderViewHostDelegateView;
 | |
|  class RenderWidgetHostView;
 | |
|  class ScreenOrientationDelegate;
 | |
|  class SiteInstance;
 | |
|  class WebContentsDelegate;
 | |
| +class WebContentsView;
 | |
|  class WebUI;
 | |
|  struct DropData;
 | |
|  struct MHTMLGenerationParams;
 | |
| @@ -265,6 +267,10 @@ class WebContents : public PageNavigator, public base::SupportsUserData {
 | |
|      network::mojom::WebSandboxFlags starting_sandbox_flags =
 | |
|          network::mojom::WebSandboxFlags::kNone;
 | |
|  
 | |
| +    // Optionally specify the view and delegate view.
 | |
| +    raw_ptr<content::WebContentsView> view = nullptr;
 | |
| +    raw_ptr<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 GetLastActiveTimeTicks(). If this is
 | |
|      // left default initialized then the value is not passed on to the
 | |
| diff --git content/public/browser/web_contents_delegate.h content/public/browser/web_contents_delegate.h
 | |
| index fbd5d3275fb9d..acd0eab6e3912 100644
 | |
| --- content/public/browser/web_contents_delegate.h
 | |
| +++ content/public/browser/web_contents_delegate.h
 | |
| @@ -98,9 +98,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;
 | |
| @@ -366,6 +368,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,
 | |
| +      raw_ptr<content::WebContentsView>* view,
 | |
| +      raw_ptr<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 c6f536682a1fa..a80aab1eaf195 100644
 | |
| --- content/public/browser/web_contents_observer.h
 | |
| +++ content/public/browser/web_contents_observer.h
 | |
| @@ -249,6 +249,9 @@ class CONTENT_EXPORT WebContentsObserver : public base::CheckedObserver {
 | |
|    // controlled by the capturing tab.
 | |
|    virtual void OnCapturedSurfaceControl() {}
 | |
|  
 | |
| +  // 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() {}
 | |
| @@ -943,6 +946,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
 |