diff --git a/libcef/browser/alloy/alloy_browser_host_impl.cc b/libcef/browser/alloy/alloy_browser_host_impl.cc index ec4635032..c7a864ce5 100644 --- a/libcef/browser/alloy/alloy_browser_host_impl.cc +++ b/libcef/browser/alloy/alloy_browser_host_impl.cc @@ -16,6 +16,7 @@ #include "libcef/browser/browser_info_manager.h" #include "libcef/browser/browser_platform_delegate.h" #include "libcef/browser/context.h" +#include "libcef/browser/extensions/browser_extensions_util.h" #include "libcef/browser/hang_monitor.h" #include "libcef/browser/media_access_query.h" #include "libcef/browser/osr/osr_util.h" @@ -604,9 +605,8 @@ void AlloyBrowserHostImpl::CancelContextMenu() { bool AlloyBrowserHostImpl::MaybeAllowNavigation( content::RenderFrameHost* opener, const content::OpenURLParams& params) { - bool is_guest_view = false; - GetFrameForHost(opener, &is_guest_view); - + const bool is_guest_view = extensions::IsBrowserPluginGuest( + content::WebContents::FromRenderFrameHost(opener)); if (is_guest_view && !params.is_pdf && !params.url.SchemeIs(extensions::kExtensionScheme) && !params.url.SchemeIs(content::kChromeUIScheme)) { diff --git a/libcef/browser/browser_contents_delegate.cc b/libcef/browser/browser_contents_delegate.cc index c95016d33..a895225c3 100644 --- a/libcef/browser/browser_contents_delegate.cc +++ b/libcef/browser/browser_contents_delegate.cc @@ -94,8 +94,7 @@ void CefBrowserContentsDelegate::ObserveWebContents( // Make sure MaybeCreateFrame is called at least one time. // Create the frame representation before OnAfterCreated is called for a new // browser. - browser_info_->MaybeCreateFrame(new_contents->GetPrimaryMainFrame(), - false /* is_guest_view */); + browser_info_->MaybeCreateFrame(new_contents->GetPrimaryMainFrame()); // Make sure RenderWidgetCreated is called at least one time. This Observer // is registered too late to catch the initial creation. @@ -319,7 +318,7 @@ void CefBrowserContentsDelegate::DraggableRegionsChanged( void CefBrowserContentsDelegate::RenderFrameCreated( content::RenderFrameHost* render_frame_host) { - browser_info_->MaybeCreateFrame(render_frame_host, false /* is_guest_view */); + browser_info_->MaybeCreateFrame(render_frame_host); if (render_frame_host->GetParent() == nullptr) { auto render_view_host = render_frame_host->GetRenderViewHost(); auto base_background_color = platform_delegate()->GetBackgroundColor(); diff --git a/libcef/browser/browser_context.cc b/libcef/browser/browser_context.cc index 877bb239e..29ea61c8e 100644 --- a/libcef/browser/browser_context.cc +++ b/libcef/browser/browser_context.cc @@ -283,8 +283,7 @@ std::vector CefBrowserContext::GetAll() { void CefBrowserContext::OnRenderFrameCreated( CefRequestContextImpl* request_context, const content::GlobalRenderFrameHostId& global_id, - bool is_main_frame, - bool is_guest_view) { + bool is_main_frame) { CEF_REQUIRE_UIT(); DCHECK(frame_util::IsValidGlobalId(global_id)); @@ -302,8 +301,7 @@ void CefBrowserContext::OnRenderFrameCreated( void CefBrowserContext::OnRenderFrameDeleted( CefRequestContextImpl* request_context, const content::GlobalRenderFrameHostId& global_id, - bool is_main_frame, - bool is_guest_view) { + bool is_main_frame) { CEF_REQUIRE_UIT(); DCHECK(frame_util::IsValidGlobalId(global_id)); diff --git a/libcef/browser/browser_context.h b/libcef/browser/browser_context.h index 21d19bac1..7158c9f46 100644 --- a/libcef/browser/browser_context.h +++ b/libcef/browser/browser_context.h @@ -132,14 +132,12 @@ class CefBrowserContext { // Called from CefRequestContextImpl::OnRenderFrameCreated. void OnRenderFrameCreated(CefRequestContextImpl* request_context, const content::GlobalRenderFrameHostId& global_id, - bool is_main_frame, - bool is_guest_view); + bool is_main_frame); // Called from CefRequestContextImpl::OnRenderFrameDeleted. void OnRenderFrameDeleted(CefRequestContextImpl* request_context, const content::GlobalRenderFrameHostId& global_id, - bool is_main_frame, - bool is_guest_view); + bool is_main_frame); // Returns the handler that matches the specified IDs. Pass -1 for unknown // values. If |require_frame_match| is true only exact matches will be diff --git a/libcef/browser/browser_frame.cc b/libcef/browser/browser_frame.cc index 8106eaa01..caf739a1b 100644 --- a/libcef/browser/browser_frame.cc +++ b/libcef/browser/browser_frame.cc @@ -59,10 +59,10 @@ void CefBrowserFrame::FrameAttached( bool reattached) { // Always send to the newly created RFH, which may be speculative when // navigating cross-origin. - bool excluded_type; - if (auto host = GetFrameHost(/*prefer_speculative=*/true, &excluded_type)) { + bool is_excluded; + if (auto host = GetFrameHost(/*prefer_speculative=*/true, &is_excluded)) { host->FrameAttached(std::move(render_frame), reattached); - } else if (excluded_type) { + } else if (is_excluded) { VLOG(1) << "frame " << frame_util::GetFrameDebugString( render_frame_host()->GetGlobalFrameToken()) @@ -82,8 +82,8 @@ void CefBrowserFrame::UpdateDraggableRegions( CefRefPtr CefBrowserFrame::GetFrameHost( bool prefer_speculative, - bool* excluded_type) const { + bool* is_excluded) const { return CefBrowserInfoManager::GetFrameHost( render_frame_host(), prefer_speculative, - /*browser_info=*/nullptr, excluded_type); + /*browser_info=*/nullptr, is_excluded); } diff --git a/libcef/browser/browser_frame.h b/libcef/browser/browser_frame.h index be5df7734..0ac6826a9 100644 --- a/libcef/browser/browser_frame.h +++ b/libcef/browser/browser_frame.h @@ -49,7 +49,7 @@ class CefBrowserFrame bool ShouldCloseOnFinishNavigation() const override { return false; } CefRefPtr GetFrameHost(bool prefer_speculative, - bool* excluded_type = nullptr) const; + bool* is_excluded = nullptr) const; }; #endif // CEF_LIBCEF_BROWSER_BROWSER_FRAME_H_ diff --git a/libcef/browser/browser_host_base.cc b/libcef/browser/browser_host_base.cc index 1e9a522dc..d3fa4f83f 100644 --- a/libcef/browser/browser_host_base.cc +++ b/libcef/browser/browser_host_base.cc @@ -126,9 +126,9 @@ CefRefPtr CefBrowserHostBase::GetBrowserForContents( return browser; } - // Try the owner WebContents if |contents| originates from a guest view such - // as the PDF viewer or Print Preview. - // This is safe to call even if Alloy extensions are disabled. + // Try the owner WebContents if |contents| originates from an excluded view + // such as the PDF viewer or Print Preview. This is safe to call even if Alloy + // extensions are disabled. if (auto* owner_contents = extensions::GetOwnerForGuestContents(contents)) { return WebContentsUserDataAdapter::Get(owner_contents); } @@ -153,8 +153,7 @@ CefRefPtr CefBrowserHostBase::GetBrowserForGlobalId( return GetBrowserForHost(render_frame_host); } else { // Use the thread-safe approach. - auto info = CefBrowserInfoManager::GetInstance()->GetBrowserInfo(global_id, - nullptr); + auto info = CefBrowserInfoManager::GetInstance()->GetBrowserInfo(global_id); if (info) { auto browser = info->browser(); if (!browser) { @@ -185,8 +184,8 @@ CefRefPtr CefBrowserHostBase::GetBrowserForGlobalToken( return GetBrowserForHost(render_frame_host); } else { // Use the thread-safe approach. - auto info = CefBrowserInfoManager::GetInstance()->GetBrowserInfo( - global_token, nullptr); + auto info = + CefBrowserInfoManager::GetInstance()->GetBrowserInfo(global_token); if (info) { auto browser = info->browser(); if (!browser) { @@ -1121,24 +1120,23 @@ void CefBrowserHostBase::OnWebContentsDestroyed( content::WebContents* web_contents) {} CefRefPtr CefBrowserHostBase::GetFrameForHost( - const content::RenderFrameHost* host, - bool* is_guest_view) { + const content::RenderFrameHost* host) { CEF_REQUIRE_UIT(); if (!host) { return nullptr; } - return browser_info_->GetFrameForHost(host, is_guest_view); + return browser_info_->GetFrameForHost(host); } CefRefPtr CefBrowserHostBase::GetFrameForGlobalId( const content::GlobalRenderFrameHostId& global_id) { - return browser_info_->GetFrameForGlobalId(global_id, nullptr); + return browser_info_->GetFrameForGlobalId(global_id); } CefRefPtr CefBrowserHostBase::GetFrameForGlobalToken( const content::GlobalRenderFrameHostToken& global_token) { - return browser_info_->GetFrameForGlobalToken(global_token, nullptr); + return browser_info_->GetFrameForGlobalToken(global_token); } void CefBrowserHostBase::AddObserver(Observer* observer) { diff --git a/libcef/browser/browser_host_base.h b/libcef/browser/browser_host_base.h index 4e81698ea..39ef0cf29 100644 --- a/libcef/browser/browser_host_base.h +++ b/libcef/browser/browser_host_base.h @@ -286,12 +286,8 @@ class CefBrowserHostBase : public CefBrowserHost, void OnWebContentsDestroyed(content::WebContents* web_contents) override; // Returns the frame object matching the specified |host| or nullptr if no - // match is found. Nullptr will also be returned if a guest view match is - // found because we don't create frame objects for guest views. If - // |is_guest_view| is non-nullptr it will be set to true in this case. Must be - // called on the UI thread. - CefRefPtr GetFrameForHost(const content::RenderFrameHost* host, - bool* is_guest_view = nullptr); + // match is found. Must be called on the UI thread. + CefRefPtr GetFrameForHost(const content::RenderFrameHost* host); // Returns the frame associated with the specified global ID/token. See // documentation on RenderFrameHost::GetFrameTreeNodeId/Token() for why the diff --git a/libcef/browser/browser_info.cc b/libcef/browser/browser_info.cc index 7c0de9e80..ea2ca4f8e 100644 --- a/libcef/browser/browser_info.cc +++ b/libcef/browser/browser_info.cc @@ -95,8 +95,7 @@ void CefBrowserInfo::SetClosing() { is_closing_ = true; } -void CefBrowserInfo::MaybeCreateFrame(content::RenderFrameHost* host, - bool is_guest_view) { +void CefBrowserInfo::MaybeCreateFrame(content::RenderFrameHost* host) { CEF_REQUIRE_UIT(); if (CefBrowserInfoManager::IsExcludedFrameHost(host)) { @@ -129,11 +128,10 @@ void CefBrowserInfo::MaybeCreateFrame(content::RenderFrameHost* host, #if DCHECK_IS_ON() // Check that the frame info hasn't changed unexpectedly. DCHECK_EQ(info->global_id_, global_id); - DCHECK_EQ(info->is_guest_view_, is_guest_view); DCHECK_EQ(info->is_main_frame_, is_main_frame); #endif - if (!info->is_guest_view_ && info->is_speculative_ && !is_speculative) { + if (info->is_speculative_ && !is_speculative) { // Upgrade the frame info from speculative to non-speculative. if (info->is_main_frame_) { // Set the main frame object. @@ -147,28 +145,23 @@ void CefBrowserInfo::MaybeCreateFrame(content::RenderFrameHost* host, auto frame_info = new FrameInfo; frame_info->host_ = host; frame_info->global_id_ = global_id; - frame_info->is_guest_view_ = is_guest_view; frame_info->is_main_frame_ = is_main_frame; frame_info->is_speculative_ = is_speculative; - // Guest views don't get their own CefBrowser or CefFrame objects. - if (!is_guest_view) { - // Create a new frame object. - frame_info->frame_ = new CefFrameHostImpl(this, host); - MaybeNotifyFrameCreated(frame_info->frame_); - if (is_main_frame && !is_speculative) { - SetMainFrame(browser_, frame_info->frame_); - } - -#if DCHECK_IS_ON() - // Check that the frame info hasn't changed unexpectedly. - DCHECK(host->GetGlobalFrameToken() == *frame_info->frame_->frame_token()); - DCHECK_EQ(frame_info->is_main_frame_, frame_info->frame_->IsMain()); -#endif + // Create a new frame object. + frame_info->frame_ = new CefFrameHostImpl(this, host); + MaybeNotifyFrameCreated(frame_info->frame_); + if (is_main_frame && !is_speculative) { + SetMainFrame(browser_, frame_info->frame_); } - browser_->request_context()->OnRenderFrameCreated(global_id, is_main_frame, - is_guest_view); +#if DCHECK_IS_ON() + // Check that the frame info hasn't changed unexpectedly. + DCHECK(host->GetGlobalFrameToken() == *frame_info->frame_->frame_token()); + DCHECK_EQ(frame_info->is_main_frame_, frame_info->frame_->IsMain()); +#endif + + browser_->request_context()->OnRenderFrameCreated(global_id, is_main_frame); // Populate the lookup maps. frame_id_map_.insert(std::make_pair(global_id, frame_info)); @@ -238,8 +231,8 @@ void CefBrowserInfo::RemoveFrame(content::RenderFrameHost* host) { auto frame_info = it->second; - browser_->request_context()->OnRenderFrameDeleted( - global_id, frame_info->is_main_frame_, frame_info->is_guest_view_); + browser_->request_context()->OnRenderFrameDeleted(global_id, + frame_info->is_main_frame_); // Remove from the lookup maps. frame_id_map_.erase(it); @@ -290,29 +283,19 @@ CefRefPtr CefBrowserInfo::CreateTempSubFrame( CefRefPtr CefBrowserInfo::GetFrameForHost( const content::RenderFrameHost* host, - bool* is_guest_view, bool prefer_speculative) const { - if (is_guest_view) { - *is_guest_view = false; - } - if (!host) { return nullptr; } return GetFrameForGlobalId( - const_cast(host)->GetGlobalId(), is_guest_view, + const_cast(host)->GetGlobalId(), prefer_speculative); } CefRefPtr CefBrowserInfo::GetFrameForGlobalId( const content::GlobalRenderFrameHostId& global_id, - bool* is_guest_view, bool prefer_speculative) const { - if (is_guest_view) { - *is_guest_view = false; - } - if (!frame_util::IsValidGlobalId(global_id)) { return nullptr; } @@ -323,13 +306,6 @@ CefRefPtr CefBrowserInfo::GetFrameForGlobalId( if (it != frame_id_map_.end()) { const auto info = it->second; - if (info->is_guest_view_) { - if (is_guest_view) { - *is_guest_view = true; - } - return nullptr; - } - if (info->is_speculative_ && !prefer_speculative) { if (info->is_main_frame_ && main_frame_) { // Always prefer the non-speculative main frame. @@ -349,12 +325,7 @@ CefRefPtr CefBrowserInfo::GetFrameForGlobalId( CefRefPtr CefBrowserInfo::GetFrameForGlobalToken( const content::GlobalRenderFrameHostToken& global_token, - bool* is_guest_view, bool prefer_speculative) const { - if (is_guest_view) { - *is_guest_view = false; - } - if (!frame_util::IsValidGlobalToken(global_token)) { return nullptr; } @@ -370,7 +341,7 @@ CefRefPtr CefBrowserInfo::GetFrameForGlobalToken( global_id = it->second; } - return GetFrameForGlobalId(global_id, is_guest_view, prefer_speculative); + return GetFrameForGlobalId(global_id, prefer_speculative); } CefBrowserInfo::FrameHostList CefBrowserInfo::GetAllFrames() const { diff --git a/libcef/browser/browser_info.h b/libcef/browser/browser_info.h index b980fdae3..0383812f1 100644 --- a/libcef/browser/browser_info.h +++ b/libcef/browser/browser_info.h @@ -67,10 +67,8 @@ class CefBrowserInfo : public base::RefCountedThreadSafe { // Ensure that a frame record exists for |host|. Called for the main frame // when the RenderView is created, or for a sub-frame when the associated // RenderFrame is created in the renderer process. - // Called from CefBrowserContentsDelegate::RenderFrameCreated (is_guest_view = - // false) or CefMimeHandlerViewGuestDelegate::OnGuestAttached (is_guest_view = - // true). - void MaybeCreateFrame(content::RenderFrameHost* host, bool is_guest_view); + // Called from CefBrowserContentsDelegate::RenderFrameCreated. + void MaybeCreateFrame(content::RenderFrameHost* host); // Used to track state changes such as entering/exiting the BackForwardCache. // Called from CefBrowserContentsDelegate::RenderFrameHostStateChanged. @@ -102,32 +100,22 @@ class CefBrowserInfo : public base::RefCountedThreadSafe { const content::GlobalRenderFrameHostId& parent_global_id); // Returns the frame object matching the specified host or nullptr if no match - // is found. Nullptr will also be returned if a guest view match is found - // because we don't create frame objects for guest views. If |is_guest_view| - // is non-nullptr it will be set to true in this case. Must be called on the - // UI thread. + // is found. Must be called on the UI thread. CefRefPtr GetFrameForHost( const content::RenderFrameHost* host, - bool* is_guest_view = nullptr, bool prefer_speculative = false) const; // Returns the frame object matching the specified ID/token or nullptr if no - // match is found. Nullptr will also be returned if a guest view match is - // found because we don't create frame objects for guest views. If - // |is_guest_view| is non-nullptr it will be set to true in this case. Safe to - // call from any thread. + // match is found. Safe to call from any thread. CefRefPtr GetFrameForGlobalId( const content::GlobalRenderFrameHostId& global_id, - bool* is_guest_view = nullptr, bool prefer_speculative = false) const; CefRefPtr GetFrameForGlobalToken( const content::GlobalRenderFrameHostToken& global_token, - bool* is_guest_view = nullptr, bool prefer_speculative = false) const; - // Returns all non-speculative frame objects that currently exist. Guest views - // will be excluded because they don't have a frame object. Safe to call from - // any thread. + // Returns all non-speculative frame objects that currently exist. Safe to + // call from any thread. using FrameHostList = std::set>; FrameHostList GetAllFrames() const; @@ -184,7 +172,6 @@ class CefBrowserInfo : public base::RefCountedThreadSafe { content::RenderFrameHost* host_; content::GlobalRenderFrameHostId global_id_; - bool is_guest_view_; bool is_main_frame_; bool is_speculative_; bool is_in_bfcache_ = false; diff --git a/libcef/browser/browser_info_manager.cc b/libcef/browser/browser_info_manager.cc index b5b225217..20f169523 100644 --- a/libcef/browser/browser_info_manager.cc +++ b/libcef/browser/browser_info_manager.cc @@ -97,7 +97,7 @@ scoped_refptr CefBrowserInfoManager::CreatePopupBrowserInfo( // Continue any pending NewBrowserInfo request. ContinueNewBrowserInfo(frame_host->GetGlobalFrameToken(), browser_info, - /*is_guest_view=*/false); + /*is_excluded=*/false); return browser_info; } @@ -307,15 +307,13 @@ void CefBrowserInfoManager::OnGetNewBrowserInfo( base::AutoLock lock_scope(browser_info_lock_); - bool is_guest_view = false; - scoped_refptr browser_info = - GetBrowserInfoInternal(global_token, &is_guest_view); + GetBrowserInfoInternal(global_token); if (browser_info) { // Send the response immediately. - SendNewBrowserInfoResponse(browser_info, is_guest_view, std::move(callback), - callback_runner); + SendNewBrowserInfoResponse(browser_info, /*is_excluded=*/false, + std::move(callback), callback_runner); return; } @@ -347,7 +345,7 @@ void CefBrowserInfoManager::OnGetNewBrowserInfo( kNewBrowserInfoResponseTimeoutMs); } - // Check for PDF viewer or print preview frames. + // Check for excluded content (PDF viewer or print preview). CEF_POST_TASK( CEF_UIT, base::BindOnce( @@ -369,29 +367,27 @@ void CefBrowserInfoManager::CheckExcludedNewBrowserInfoOnUIThread( return; } - // PDF viewer and print preview create multiple renderer processes. Not all - // of those processes are currently tracked by CefBrowserInfo, so we also - // treat frames from untracked processes (like the print preview dialog) as - // guest views in the renderer process. + // PDF viewer and print preview create multiple renderer processes. These + // excluded processes are not tracked by CefBrowserInfo. CefBrowserInfo* browser_info; - bool excluded_type; - GetFrameHost(rfh, /*prefer_speculative=*/true, &browser_info, &excluded_type); - if (browser_info && excluded_type) { + bool is_excluded; + GetFrameHost(rfh, /*prefer_speculative=*/true, &browser_info, &is_excluded); + if (browser_info && is_excluded) { g_info_manager->ContinueNewBrowserInfo(global_token, browser_info, - /*is_guest_view=*/true); + /*is_excluded=*/true); } } void CefBrowserInfoManager::ContinueNewBrowserInfo( const content::GlobalRenderFrameHostToken& global_token, scoped_refptr browser_info, - bool is_guest_view) { + bool is_excluded) { base::AutoLock lock_scope(browser_info_lock_); // Continue any pending NewBrowserInfo request. auto it = pending_new_browser_info_map_.find(global_token); if (it != pending_new_browser_info_map_.end()) { - SendNewBrowserInfoResponse(browser_info, is_guest_view, + SendNewBrowserInfoResponse(browser_info, is_excluded, std::move(it->second->callback), it->second->callback_runner); pending_new_browser_info_map_.erase(it); @@ -444,17 +440,15 @@ void CefBrowserInfoManager::DestroyAllBrowsers() { } scoped_refptr CefBrowserInfoManager::GetBrowserInfo( - const content::GlobalRenderFrameHostId& global_id, - bool* is_guest_view) { + const content::GlobalRenderFrameHostId& global_id) { base::AutoLock lock_scope(browser_info_lock_); - return GetBrowserInfoInternal(global_id, is_guest_view); + return GetBrowserInfoInternal(global_id); } scoped_refptr CefBrowserInfoManager::GetBrowserInfo( - const content::GlobalRenderFrameHostToken& global_token, - bool* is_guest_view) { + const content::GlobalRenderFrameHostToken& global_token) { base::AutoLock lock_scope(browser_info_lock_); - return GetBrowserInfoInternal(global_token, is_guest_view); + return GetBrowserInfoInternal(global_token); } bool CefBrowserInfoManager::MaybeAllowNavigation( @@ -496,7 +490,7 @@ CefRefPtr CefBrowserInfoManager::GetFrameHost( content::RenderFrameHost* rfh, bool prefer_speculative, CefBrowserInfo** browser_info, - bool* excluded_type) { + bool* is_excluded) { CEF_REQUIRE_UIT(); DCHECK(rfh); @@ -510,28 +504,22 @@ CefRefPtr CefBrowserInfoManager::GetFrameHost( bool excluded = is_pdf_process || is_browser_process_guest || is_print_preview_dialog; - bool guest_view = false; CefRefPtr frame; // A BrowserHost may match an excluded RFH type. Some associations are // registered directly via CefBrowserInfo::MaybeCreateFrame and some are // discovered indirectly via extensions::GetOwnerForGuestContents. auto browser = CefBrowserHostBase::GetBrowserForHost(rfh); - if (browser) { - frame = browser->browser_info()->GetFrameForHost(rfh, &guest_view, - prefer_speculative); - excluded |= guest_view; - - // A FrameHost should never exist for an excluded type. - DCHECK(!frame || !excluded); + if (browser && !excluded) { + frame = browser->browser_info()->GetFrameForHost(rfh, prefer_speculative); } if (browser_info) { *browser_info = browser ? browser->browser_info().get() : nullptr; } - if (excluded_type) { - *excluded_type = excluded; + if (is_excluded) { + *is_excluded = excluded; } if (VLOG_IS_ON(1)) { @@ -539,9 +527,7 @@ CefRefPtr CefBrowserInfoManager::GetFrameHost( frame_util::GetFrameDebugString(rfh->GetGlobalFrameToken()); const bool is_main = rfh->GetParent() == nullptr; - VLOG(1) << "frame " << debug_string - << " registered_guest_view=" << guest_view - << ", pdf_process=" << is_pdf_process + VLOG(1) << "frame " << debug_string << ", pdf_process=" << is_pdf_process << ", browser_process_guest=" << is_browser_process_guest << ", print_preview_dialog=" << is_print_preview_dialog << ", main=" << is_main << (browser ? "" : ", has no BrowserHost") @@ -686,26 +672,16 @@ CefBrowserInfoManager::PopPendingPopup(PendingPopup::Step previous_step_alloy, } scoped_refptr CefBrowserInfoManager::GetBrowserInfoInternal( - const content::GlobalRenderFrameHostId& global_id, - bool* is_guest_view) { + const content::GlobalRenderFrameHostId& global_id) { browser_info_lock_.AssertAcquired(); - if (is_guest_view) { - *is_guest_view = false; - } - if (!frame_util::IsValidGlobalId(global_id)) { return nullptr; } for (const auto& browser_info : browser_info_list_) { - bool is_guest_view_tmp; - auto frame = - browser_info->GetFrameForGlobalId(global_id, &is_guest_view_tmp); - if (frame || is_guest_view_tmp) { - if (is_guest_view) { - *is_guest_view = is_guest_view_tmp; - } + auto frame = browser_info->GetFrameForGlobalId(global_id); + if (frame) { return browser_info; } } @@ -714,26 +690,16 @@ scoped_refptr CefBrowserInfoManager::GetBrowserInfoInternal( } scoped_refptr CefBrowserInfoManager::GetBrowserInfoInternal( - const content::GlobalRenderFrameHostToken& global_token, - bool* is_guest_view) { + const content::GlobalRenderFrameHostToken& global_token) { browser_info_lock_.AssertAcquired(); - if (is_guest_view) { - *is_guest_view = false; - } - if (!frame_util::IsValidGlobalToken(global_token)) { return nullptr; } for (const auto& browser_info : browser_info_list_) { - bool is_guest_view_tmp; - auto frame = - browser_info->GetFrameForGlobalToken(global_token, &is_guest_view_tmp); - if (frame || is_guest_view_tmp) { - if (is_guest_view) { - *is_guest_view = is_guest_view_tmp; - } + auto frame = browser_info->GetFrameForGlobalToken(global_token); + if (frame) { return browser_info; } } @@ -744,20 +710,20 @@ scoped_refptr CefBrowserInfoManager::GetBrowserInfoInternal( // static void CefBrowserInfoManager::SendNewBrowserInfoResponse( scoped_refptr browser_info, - bool is_guest_view, + bool is_excluded, cef::mojom::BrowserManager::GetNewBrowserInfoCallback callback, scoped_refptr callback_runner) { if (!callback_runner->RunsTasksInCurrentSequence()) { callback_runner->PostTask( FROM_HERE, base::BindOnce(&CefBrowserInfoManager::SendNewBrowserInfoResponse, - browser_info, is_guest_view, std::move(callback), + browser_info, is_excluded, std::move(callback), callback_runner)); return; } auto params = cef::mojom::NewBrowserInfo::New(); - params->is_guest_view = is_guest_view; + params->is_excluded = is_excluded; if (browser_info) { params->browser_id = browser_info->browser_id(); @@ -783,7 +749,7 @@ void CefBrowserInfoManager::SendNewBrowserInfoResponse( // static void CefBrowserInfoManager::CancelNewBrowserInfoResponse( PendingNewBrowserInfo* pending_info) { - SendNewBrowserInfoResponse(/*browser_info=*/nullptr, /*is_guest_view=*/false, + SendNewBrowserInfoResponse(/*browser_info=*/nullptr, /*is_excluded=*/false, std::move(pending_info->callback), pending_info->callback_runner); } diff --git a/libcef/browser/browser_info_manager.h b/libcef/browser/browser_info_manager.h index 2e5fe85c0..9b4d4a8c9 100644 --- a/libcef/browser/browser_info_manager.h +++ b/libcef/browser/browser_info_manager.h @@ -110,9 +110,9 @@ class CefBrowserInfoManager : public content::RenderProcessHostObserver { // browser info to the renderer process. If the browser info already exists // the response will be sent immediately. Otherwise, the response will be sent // when CreatePopupBrowserInfo creates the browser info. The info will already - // exist for explicitly created browsers and guest views. It may sometimes - // already exist for traditional popup browsers depending on timing. See - // comments on PendingPopup for more information. + // exist for explicitly created browsers. It may sometimes already exist for + // traditional popup browsers depending on timing. See comments on + // PendingPopup for more information. void OnGetNewBrowserInfo( const content::GlobalRenderFrameHostToken& global_token, cef::mojom::BrowserManager::GetNewBrowserInfoCallback callback); @@ -127,15 +127,10 @@ class CefBrowserInfoManager : public content::RenderProcessHostObserver { // Returns the CefBrowserInfo matching the specified ID/token or nullptr if no // match is found. It is allowed to add new callers of this method but // consider using CefBrowserHostBase::GetBrowserForGlobalId/Token() instead. - // If |is_guest_view| is non-nullptr it will be set to true if the ID/token - // matches a guest view associated with the returned browser info instead of - // the browser itself. scoped_refptr GetBrowserInfo( - const content::GlobalRenderFrameHostId& global_id, - bool* is_guest_view = nullptr); + const content::GlobalRenderFrameHostId& global_id); scoped_refptr GetBrowserInfo( - const content::GlobalRenderFrameHostToken& global_token, - bool* is_guest_view = nullptr); + const content::GlobalRenderFrameHostToken& global_token); // Returns all existing CefBrowserInfo objects. using BrowserInfoList = std::list>; @@ -152,13 +147,13 @@ class CefBrowserInfoManager : public content::RenderProcessHostObserver { bool use_default_browser_creation); // Returns the FrameHost associated with |rfh|, if any. |browser_info| and - // |excluded_type| will be populated if non-nullptr. An excluded type will not + // |is_excluded| will be populated if non-nullptr. An excluded type will not // have a FrameHost but |browser_info| may still be populated if the // association is known. static CefRefPtr GetFrameHost(content::RenderFrameHost* rfh, bool prefer_speculative, CefBrowserInfo** browser_info, - bool* excluded_type); + bool* is_excluded); // Returns true if |rfh| should be excluded (no FrameHost created). static bool IsExcludedFrameHost(content::RenderFrameHost* rfh); @@ -171,7 +166,7 @@ class CefBrowserInfoManager : public content::RenderProcessHostObserver { // - CanCreateWindow (UIT): // Provides an opportunity to cancel the popup (calls OnBeforePopup) and // creates the new platform delegate for the popup. If the popup owner is - // an extension guest view then the popup is canceled and + // an extension guest view (PDF viewer) then the popup is canceled and // WebContentsDelegate::OpenURLFromTab is called via the // CefBrowserHostBase::MaybeAllowNavigation implementation. // And then the following calls may occur at the same time: @@ -237,11 +232,9 @@ class CefBrowserInfoManager : public content::RenderProcessHostObserver { // Retrieves the BrowserInfo matching the specified ID/token. scoped_refptr GetBrowserInfoInternal( - const content::GlobalRenderFrameHostId& global_id, - bool* is_guest_view); + const content::GlobalRenderFrameHostId& global_id); scoped_refptr GetBrowserInfoInternal( - const content::GlobalRenderFrameHostToken& global_token, - bool* is_guest_view); + const content::GlobalRenderFrameHostToken& global_token); // Check for excluded frames that can be responded to immediately. static void CheckExcludedNewBrowserInfoOnUIThread( @@ -250,12 +243,12 @@ class CefBrowserInfoManager : public content::RenderProcessHostObserver { void ContinueNewBrowserInfo( const content::GlobalRenderFrameHostToken& global_token, scoped_refptr browser_info, - bool is_guest_view); + bool is_excluded); // Send the response for a pending OnGetNewBrowserInfo request. static void SendNewBrowserInfoResponse( scoped_refptr browser_info, - bool is_guest_view, + bool is_excluded, cef::mojom::BrowserManager::GetNewBrowserInfoCallback callback, scoped_refptr callback_runner); diff --git a/libcef/browser/chrome/chrome_context_menu_handler.cc b/libcef/browser/chrome/chrome_context_menu_handler.cc index 9defbcadd..eacd6eae8 100644 --- a/libcef/browser/chrome/chrome_context_menu_handler.cc +++ b/libcef/browser/chrome/chrome_context_menu_handler.cc @@ -256,7 +256,7 @@ class CefContextMenuObserver : public RenderViewContextMenuObserver, // May return nullptr if the frame is destroyed while the menu is pending. auto* rfh = context_menu_->GetRenderFrameHost(); if (rfh) { - // May return nullptr for guest views. + // May return nullptr for excluded views. frame = browser_->GetFrameForHost(rfh); } if (!frame) { diff --git a/libcef/browser/chrome/extensions/chrome_mime_handler_view_guest_delegate_cef.cc b/libcef/browser/chrome/extensions/chrome_mime_handler_view_guest_delegate_cef.cc index 0dc43381e..ace733691 100644 --- a/libcef/browser/chrome/extensions/chrome_mime_handler_view_guest_delegate_cef.cc +++ b/libcef/browser/chrome/extensions/chrome_mime_handler_view_guest_delegate_cef.cc @@ -6,7 +6,6 @@ #include "libcef/browser/chrome/extensions/chrome_mime_handler_view_guest_delegate_cef.h" #include "libcef/browser/browser_host_base.h" -#include "libcef/browser/browser_info.h" #include "libcef/browser/chrome/chrome_context_menu_handler.h" #include "extensions/browser/guest_view/mime_handler_view/mime_handler_view_guest.h" @@ -15,37 +14,11 @@ namespace extensions { ChromeMimeHandlerViewGuestDelegateCef::ChromeMimeHandlerViewGuestDelegateCef( MimeHandlerViewGuest* guest) - : guest_(guest), owner_web_contents_(guest_->owner_web_contents()) {} + : owner_web_contents_(guest->owner_web_contents()) {} ChromeMimeHandlerViewGuestDelegateCef:: ~ChromeMimeHandlerViewGuestDelegateCef() = default; -void ChromeMimeHandlerViewGuestDelegateCef::OnGuestAttached() { - content::WebContents* web_contents = guest_->web_contents(); - DCHECK(web_contents); - - auto owner_browser = - CefBrowserHostBase::GetBrowserForContents(owner_web_contents_); - DCHECK(owner_browser); - - // Associate guest state information with the owner browser. - owner_browser->browser_info()->MaybeCreateFrame( - web_contents->GetPrimaryMainFrame(), true /* is_guest_view */); -} - -void ChromeMimeHandlerViewGuestDelegateCef::OnGuestDetached() { - content::WebContents* web_contents = guest_->web_contents(); - DCHECK(web_contents); - - auto owner_browser = - CefBrowserHostBase::GetBrowserForContents(owner_web_contents_); - DCHECK(owner_browser); - - // Disassociate guest state information with the owner browser. - owner_browser->browser_info()->RemoveFrame( - web_contents->GetPrimaryMainFrame()); -} - bool ChromeMimeHandlerViewGuestDelegateCef::HandleContextMenu( content::RenderFrameHost& render_frame_host, const content::ContextMenuParams& params) { diff --git a/libcef/browser/chrome/extensions/chrome_mime_handler_view_guest_delegate_cef.h b/libcef/browser/chrome/extensions/chrome_mime_handler_view_guest_delegate_cef.h index cf13b1238..d3ee13df3 100644 --- a/libcef/browser/chrome/extensions/chrome_mime_handler_view_guest_delegate_cef.h +++ b/libcef/browser/chrome/extensions/chrome_mime_handler_view_guest_delegate_cef.h @@ -7,10 +7,11 @@ #define CEF_LIBCEF_BROWSER_CHROME_EXTENSIONS_CHROME_MIME_HANDLER_VIEW_GUEST_DELEGATE_CEF_H_ #include "chrome/browser/guest_view/mime_handler_view/chrome_mime_handler_view_guest_delegate.h" -#include "extensions/browser/guest_view/mime_handler_view/mime_handler_view_guest.h" namespace extensions { +class MimeHandlerViewGuest; + class ChromeMimeHandlerViewGuestDelegateCef : public ChromeMimeHandlerViewGuestDelegate { public: @@ -24,13 +25,10 @@ class ChromeMimeHandlerViewGuestDelegateCef ~ChromeMimeHandlerViewGuestDelegateCef() override; // MimeHandlerViewGuestDelegate methods. - void OnGuestAttached() override; - void OnGuestDetached() override; bool HandleContextMenu(content::RenderFrameHost& render_frame_host, const content::ContextMenuParams& params) override; private: - MimeHandlerViewGuest* guest_; // Owns us. content::WebContents* owner_web_contents_; }; diff --git a/libcef/browser/extensions/extension_system.cc b/libcef/browser/extensions/extension_system.cc index 01fba44ca..9dafaa36a 100644 --- a/libcef/browser/extensions/extension_system.cc +++ b/libcef/browser/extensions/extension_system.cc @@ -209,8 +209,8 @@ void CefExtensionSystem::Init() { // MimeHandlerViewGuest and CefMimeHandlerViewGuestDelegate in the browser // process. // 11.MimeHandlerViewGuest::CreateWebContents creates a new guest WebContents - // (is_guest_view=true) to host the PDF extension and the PDF resource - // stream is retrieved via MimeHandlerStreamManager::ReleaseStream. + // to host the PDF extension and the PDF resource stream is retrieved via + // MimeHandlerStreamManager::ReleaseStream. // 12.MimeHandlerViewGuest::DidAttachToEmbedder calls // CefMimeHandlerViewGuestDelegate::OnGuestAttached to associate the guest // WebContents routing IDs with the owner CefBrowser. MimeHandlerViewGuest diff --git a/libcef/browser/extensions/mime_handler_view_guest_delegate.cc b/libcef/browser/extensions/mime_handler_view_guest_delegate.cc index 9c947bb3e..429f1042a 100644 --- a/libcef/browser/extensions/mime_handler_view_guest_delegate.cc +++ b/libcef/browser/extensions/mime_handler_view_guest_delegate.cc @@ -6,9 +6,6 @@ #include "libcef/browser/extensions/mime_handler_view_guest_delegate.h" #include "libcef/browser/alloy/alloy_browser_host_impl.h" -#include "libcef/browser/alloy/alloy_content_browser_client.h" -#include "libcef/browser/browser_context.h" -#include "libcef/browser/browser_info.h" #include "libcef/browser/osr/web_contents_view_osr.h" #include "extensions/browser/guest_view/mime_handler_view/mime_handler_view_guest.h" @@ -17,7 +14,7 @@ namespace extensions { CefMimeHandlerViewGuestDelegate::CefMimeHandlerViewGuestDelegate( MimeHandlerViewGuest* guest) - : guest_(guest), owner_web_contents_(guest_->owner_web_contents()) {} + : owner_web_contents_(guest->owner_web_contents()) {} CefMimeHandlerViewGuestDelegate::~CefMimeHandlerViewGuestDelegate() = default; @@ -37,32 +34,6 @@ void CefMimeHandlerViewGuestDelegate::OverrideWebContentsCreateParams( } } -void CefMimeHandlerViewGuestDelegate::OnGuestAttached() { - content::WebContents* web_contents = guest_->web_contents(); - DCHECK(web_contents); - - CefRefPtr owner_browser = - AlloyBrowserHostImpl::GetBrowserForContents(owner_web_contents_); - DCHECK(owner_browser); - - // Associate guest state information with the owner browser. - owner_browser->browser_info()->MaybeCreateFrame( - web_contents->GetPrimaryMainFrame(), true /* is_guest_view */); -} - -void CefMimeHandlerViewGuestDelegate::OnGuestDetached() { - content::WebContents* web_contents = guest_->web_contents(); - DCHECK(web_contents); - - CefRefPtr owner_browser = - AlloyBrowserHostImpl::GetBrowserForContents(owner_web_contents_); - DCHECK(owner_browser); - - // Disassociate guest state information with the owner browser. - owner_browser->browser_info()->RemoveFrame( - web_contents->GetPrimaryMainFrame()); -} - bool CefMimeHandlerViewGuestDelegate::HandleContextMenu( content::RenderFrameHost& render_frame_host, const content::ContextMenuParams& params) { diff --git a/libcef/browser/extensions/mime_handler_view_guest_delegate.h b/libcef/browser/extensions/mime_handler_view_guest_delegate.h index 96b413b76..e7db6c327 100644 --- a/libcef/browser/extensions/mime_handler_view_guest_delegate.h +++ b/libcef/browser/extensions/mime_handler_view_guest_delegate.h @@ -6,7 +6,6 @@ #ifndef CEF_LIBCEF_BROWSER_EXTENSIONS_MIME_HANDLER_VIEW_GUEST_DELEGATE_H_ #define CEF_LIBCEF_BROWSER_EXTENSIONS_MIME_HANDLER_VIEW_GUEST_DELEGATE_H_ -#include "extensions/browser/guest_view/mime_handler_view/mime_handler_view_guest.h" #include "extensions/browser/guest_view/mime_handler_view/mime_handler_view_guest_delegate.h" namespace content { @@ -15,6 +14,8 @@ struct ContextMenuParams; namespace extensions { +class MimeHandlerViewGuest; + class CefMimeHandlerViewGuestDelegate : public MimeHandlerViewGuestDelegate { public: explicit CefMimeHandlerViewGuestDelegate(MimeHandlerViewGuest* guest); @@ -29,13 +30,10 @@ class CefMimeHandlerViewGuestDelegate : public MimeHandlerViewGuestDelegate { // MimeHandlerViewGuestDelegate methods. void OverrideWebContentsCreateParams( content::WebContents::CreateParams* params) override; - void OnGuestAttached() override; - void OnGuestDetached() override; bool HandleContextMenu(content::RenderFrameHost& render_frame_host, const content::ContextMenuParams& params) override; private: - MimeHandlerViewGuest* guest_; // Owns us. content::WebContents* owner_web_contents_; }; diff --git a/libcef/browser/javascript_dialog_manager.cc b/libcef/browser/javascript_dialog_manager.cc index 14b26df85..509047bb8 100644 --- a/libcef/browser/javascript_dialog_manager.cc +++ b/libcef/browser/javascript_dialog_manager.cc @@ -69,9 +69,9 @@ javascript_dialogs::TabModalDialogManager* GetTabModalDialogManager( return manager; } - // Try the owner WebContents if the dialog originates from a guest view such - // as the PDF viewer or Print Preview. - // This is safe to call even if Alloy extensions are disabled. + // Try the owner WebContents if the dialog originates from an excluded view + // such as the PDF viewer or Print Preview. This is safe to call even if Alloy + // extensions are disabled. if (auto* owner_contents = extensions::GetOwnerForGuestContents(web_contents)) { return javascript_dialogs::TabModalDialogManager::FromWebContents( diff --git a/libcef/browser/net_service/resource_request_handler_wrapper.cc b/libcef/browser/net_service/resource_request_handler_wrapper.cc index 77ae449de..bc823f6ea 100644 --- a/libcef/browser/net_service/resource_request_handler_wrapper.cc +++ b/libcef/browser/net_service/resource_request_handler_wrapper.cc @@ -1336,7 +1336,7 @@ std::unique_ptr CreateInterceptedRequestHandler( if (frame) { browserPtr = CefBrowserHostBase::GetBrowserForHost(frame); if (browserPtr) { - // May return nullptr for guest view requests. + // May return nullptr for excluded view requests. framePtr = browserPtr->GetFrameForHost(frame); if (!framePtr) { framePtr = browserPtr->GetMainFrame(); @@ -1407,7 +1407,7 @@ std::unique_ptr CreateInterceptedRequestHandler( browserPtr = CefBrowserHostBase::GetBrowserForHost(frame); if (browserPtr) { - // May return nullptr for guest view requests. + // May return nullptr for excluded view requests. framePtr = browserPtr->GetFrameForHost(frame); if (!framePtr) { framePtr = browserPtr->GetMainFrame(); diff --git a/libcef/browser/request_context_impl.cc b/libcef/browser/request_context_impl.cc index 057625b73..15cdc5b7a 100644 --- a/libcef/browser/request_context_impl.cc +++ b/libcef/browser/request_context_impl.cc @@ -702,18 +702,14 @@ cef_color_variant_t CefRequestContextImpl::GetChromeColorSchemeVariant() { void CefRequestContextImpl::OnRenderFrameCreated( const content::GlobalRenderFrameHostId& global_id, - bool is_main_frame, - bool is_guest_view) { - browser_context_->OnRenderFrameCreated(this, global_id, is_main_frame, - is_guest_view); + bool is_main_frame) { + browser_context_->OnRenderFrameCreated(this, global_id, is_main_frame); } void CefRequestContextImpl::OnRenderFrameDeleted( const content::GlobalRenderFrameHostId& global_id, - bool is_main_frame, - bool is_guest_view) { - browser_context_->OnRenderFrameDeleted(this, global_id, is_main_frame, - is_guest_view); + bool is_main_frame) { + browser_context_->OnRenderFrameDeleted(this, global_id, is_main_frame); } // static diff --git a/libcef/browser/request_context_impl.h b/libcef/browser/request_context_impl.h index 804c1c843..9890fb8a1 100644 --- a/libcef/browser/request_context_impl.h +++ b/libcef/browser/request_context_impl.h @@ -139,19 +139,15 @@ class CefRequestContextImpl : public CefRequestContext { const CefRequestContextSettings& settings() const { return config_.settings; } - // Called from CefBrowserContentsDelegate::RenderFrameCreated or - // CefMimeHandlerViewGuestDelegate::OnGuestAttached when a render frame is - // created. + // Called from CefBrowserContentsDelegate::RenderFrameCreated when a render + // frame is created. void OnRenderFrameCreated(const content::GlobalRenderFrameHostId& global_id, - bool is_main_frame, - bool is_guest_view); + bool is_main_frame); - // Called from CefBrowserContentsDelegate::RenderFrameDeleted or - // CefMimeHandlerViewGuestDelegate::OnGuestDetached when a render frame is - // deleted. + // Called from CefBrowserContentsDelegate::RenderFrameDeleted when a render + // frame is deleted. void OnRenderFrameDeleted(const content::GlobalRenderFrameHostId& global_id, - bool is_main_frame, - bool is_guest_view); + bool is_main_frame); private: friend class CefRequestContext; diff --git a/libcef/common/mojom/cef.mojom b/libcef/common/mojom/cef.mojom index 821073371..75dc10bb1 100644 --- a/libcef/common/mojom/cef.mojom +++ b/libcef/common/mojom/cef.mojom @@ -119,7 +119,7 @@ struct NewBrowserInfo { bool? is_popup; bool? is_windowless; bool? print_preview_enabled; - bool is_guest_view; + bool is_excluded; mojo_base.mojom.DictionaryValue? extra_info; }; diff --git a/libcef/renderer/render_manager.cc b/libcef/renderer/render_manager.cc index eeadcf4c7..57cd712bb 100644 --- a/libcef/renderer/render_manager.cc +++ b/libcef/renderer/render_manager.cc @@ -52,13 +52,13 @@ CefRenderManager* g_manager = nullptr; } // namespace -// Placeholder object for guest views. -class CefGuestView : public blink::WebViewObserver { +// Placeholder object for excluded views. +class CefExcludedView : public blink::WebViewObserver { public: - CefGuestView(CefRenderManager* manager, - blink::WebView* web_view, - std::optional is_windowless, - std::optional print_preview_enabled) + CefExcludedView(CefRenderManager* manager, + blink::WebView* web_view, + std::optional is_windowless, + std::optional print_preview_enabled) : blink::WebViewObserver(web_view), manager_(manager), is_windowless_(is_windowless), @@ -71,7 +71,7 @@ class CefGuestView : public blink::WebViewObserver { private: // RenderViewObserver methods. - void OnDestruct() override { manager_->OnGuestViewDestroyed(this); } + void OnDestruct() override { manager_->OnExcludedViewDestroyed(this); } CefRenderManager* const manager_; const std::optional is_windowless_; @@ -306,8 +306,8 @@ CefRefPtr CefRenderManager::MaybeCreateBrowser( return nullptr; } - // Don't create another browser or guest view object if one already exists for - // the view. + // Don't create another browser or excluded view object if one already exists + // for the view. auto browser = GetBrowserForView(web_view); if (browser) { if (is_windowless) { @@ -319,13 +319,13 @@ CefRefPtr CefRenderManager::MaybeCreateBrowser( return browser; } - auto guest_view = GetGuestViewForView(web_view); - if (guest_view) { + auto excluded_view = GetExcludedViewForView(web_view); + if (excluded_view) { if (is_windowless) { - *is_windowless = guest_view->is_windowless(); + *is_windowless = excluded_view->is_windowless(); } if (print_preview_enabled) { - *print_preview_enabled = guest_view->print_preview_enabled(); + *print_preview_enabled = excluded_view->print_preview_enabled(); } return nullptr; } @@ -346,14 +346,14 @@ CefRefPtr CefRenderManager::MaybeCreateBrowser( *print_preview_enabled = params->print_preview_enabled; } - if (params->is_guest_view || params->browser_id < 0) { - // Don't create a CefBrowser for a guest view (PDF renderer, PDF extension - // or print preview dialog), or if the new browser info response has timed - // out. - guest_views_.insert(std::make_pair( + if (params->is_excluded || params->browser_id < 0) { + // Don't create a CefBrowser for excluded content (PDF renderer, PDF + // extension or print preview dialog), or if the new browser info response + // has timed out. + excluded_views_.insert(std::make_pair( web_view, - std::make_unique(this, web_view, params->is_windowless, - params->print_preview_enabled))); + std::make_unique(this, web_view, params->is_windowless, + params->print_preview_enabled))); return nullptr; } @@ -398,26 +398,27 @@ void CefRenderManager::OnBrowserDestroyed(CefBrowserImpl* browser) { DCHECK(false); } -CefGuestView* CefRenderManager::GetGuestViewForView(blink::WebView* view) { +CefExcludedView* CefRenderManager::GetExcludedViewForView( + blink::WebView* view) { CEF_REQUIRE_RT_RETURN(nullptr); - GuestViewMap::const_iterator it = guest_views_.find(view); - if (it != guest_views_.end()) { + ExcludedViewMap::const_iterator it = excluded_views_.find(view); + if (it != excluded_views_.end()) { return it->second.get(); } return nullptr; } -void CefRenderManager::OnGuestViewDestroyed(CefGuestView* guest_view) { - GuestViewMap::iterator it = guest_views_.begin(); - for (; it != guest_views_.end(); ++it) { - if (it->second.get() == guest_view) { - guest_views_.erase(it); +void CefRenderManager::OnExcludedViewDestroyed(CefExcludedView* excluded_view) { + ExcludedViewMap::iterator it = excluded_views_.begin(); + for (; it != excluded_views_.end(); ++it) { + if (it->second.get() == excluded_view) { + excluded_views_.erase(it); return; } } - // No guest view was found in the map. + // No excluded view was found in the map. DCHECK(false); } diff --git a/libcef/renderer/render_manager.h b/libcef/renderer/render_manager.h index 38448dada..8589dcaa7 100644 --- a/libcef/renderer/render_manager.h +++ b/libcef/renderer/render_manager.h @@ -31,7 +31,7 @@ class BinderMap; } // namespace mojo class CefBrowserImpl; -class CefGuestView; +class CefExcludedView; class CefRenderFrameObserver; // Singleton object for managing BrowserImpl instances. Only accessed on the @@ -77,7 +77,7 @@ class CefRenderManager : public cef::mojom::RenderManager { private: friend class CefBrowserImpl; - friend class CefGuestView; + friend class CefExcludedView; // Binds receivers for the RenderManager interface. void BindReceiver(mojo::PendingReceiver receiver); @@ -91,7 +91,7 @@ class CefRenderManager : public cef::mojom::RenderManager { void WebKitInitialized(); // Maybe create a new browser object, return the existing one, or return - // nullptr for guest views. + // nullptr for excluded views. CefRefPtr MaybeCreateBrowser( blink::WebView* web_view, content::RenderFrame* render_frame, @@ -102,19 +102,20 @@ class CefRenderManager : public cef::mojom::RenderManager { // Called from CefBrowserImpl::OnDestruct(). void OnBrowserDestroyed(CefBrowserImpl* browser); - // Returns the guest view associated with the specified RenderView if any. - CefGuestView* GetGuestViewForView(blink::WebView* view); + // Returns the excluded view associated with the specified RenderView if any. + CefExcludedView* GetExcludedViewForView(blink::WebView* view); - // Called from CefGuestView::OnDestruct(). - void OnGuestViewDestroyed(CefGuestView* guest_view); + // Called from CefExcludedView::OnDestruct(). + void OnExcludedViewDestroyed(CefExcludedView* excluded_view); // Map of RenderView pointers to CefBrowserImpl references. using BrowserMap = std::map>; BrowserMap browsers_; - // Map of RenderView poiners to CefGuestView implementations. - using GuestViewMap = std::map>; - GuestViewMap guest_views_; + // Map of RenderView poiners to CefExcludedView implementations. + using ExcludedViewMap = + std::map>; + ExcludedViewMap excluded_views_; // Cross-origin white list entries that need to be registered with WebKit. std::vector diff --git a/patch/patch.cfg b/patch/patch.cfg index ab7110b3e..075ca7fb8 100644 --- a/patch/patch.cfg +++ b/patch/patch.cfg @@ -150,8 +150,7 @@ patches = [ 'name': 'web_contents_1257_1565', }, { - # Support custom RenderWidgetHostViewOSR for MimeHandlerViewGuest and - # expose OnGuestAttached/Detached notifications. + # Support custom RenderWidgetHostViewOSR for MimeHandlerViewGuest. # https://github.com/chromiumembedded/cef/issues/1565 # https://github.com/chromiumembedded/cef/issues/2727 'name': 'mime_handler_view_guest_1565_2727', diff --git a/patch/patches/mime_handler_view_guest_1565_2727.patch b/patch/patches/mime_handler_view_guest_1565_2727.patch index 42ed85959..ea05b6610 100644 --- a/patch/patches/mime_handler_view_guest_1565_2727.patch +++ b/patch/patches/mime_handler_view_guest_1565_2727.patch @@ -12,7 +12,7 @@ index 285dc38950991..326646bb585da 100644 virtual ~WebContentsView() = default; diff --git extensions/browser/guest_view/mime_handler_view/mime_handler_view_guest.cc extensions/browser/guest_view/mime_handler_view/mime_handler_view_guest.cc -index bd8b5ddfd8659..0f1e6e2ed9ea2 100644 +index bd8b5ddfd8659..767c0ec89ef7a 100644 --- extensions/browser/guest_view/mime_handler_view/mime_handler_view_guest.cc +++ extensions/browser/guest_view/mime_handler_view/mime_handler_view_guest.cc @@ -205,6 +205,8 @@ void MimeHandlerViewGuest::CreateWebContents( @@ -24,51 +24,8 @@ index bd8b5ddfd8659..0f1e6e2ed9ea2 100644 std::move(callback).Run(std::move(owned_this), WebContents::CreateWithSessionStorage( params, owner_web_contents() -@@ -213,6 +215,10 @@ void MimeHandlerViewGuest::CreateWebContents( - } - - void MimeHandlerViewGuest::DidAttachToEmbedder() { -+ is_guest_attached_ = true; -+ if (delegate_) -+ delegate_->OnGuestAttached(); -+ - DCHECK(stream_->handler_url().SchemeIs(extensions::kExtensionScheme)); - GetController().LoadURL(stream_->handler_url(), content::Referrer(), - ui::PAGE_TRANSITION_AUTO_TOPLEVEL, std::string()); -@@ -489,6 +495,14 @@ void MimeHandlerViewGuest::DidFinishNavigation( - } - } - -+void MimeHandlerViewGuest::WebContentsDestroyed() { -+ if (is_guest_attached_ && delegate_) -+ delegate_->OnGuestDetached(); -+ -+ // May delete |this|. -+ GuestView::WebContentsDestroyed(); -+} -+ - void MimeHandlerViewGuest::FuseBeforeUnloadControl( - mojo::PendingReceiver receiver) { - if (!pending_before_unload_control_) -diff --git extensions/browser/guest_view/mime_handler_view/mime_handler_view_guest.h extensions/browser/guest_view/mime_handler_view/mime_handler_view_guest.h -index f0b71aba6dfb4..a8b4b6dc27fa7 100644 ---- extensions/browser/guest_view/mime_handler_view/mime_handler_view_guest.h -+++ extensions/browser/guest_view/mime_handler_view/mime_handler_view_guest.h -@@ -198,10 +198,12 @@ class MimeHandlerViewGuest - void ReadyToCommitNavigation( - content::NavigationHandle* navigation_handle) final; - void DidFinishNavigation(content::NavigationHandle* navigation_handle) final; -+ void WebContentsDestroyed() override; - - std::unique_ptr delegate_; - std::unique_ptr stream_; - -+ bool is_guest_attached_ = false; - bool is_guest_fullscreen_ = false; - bool is_embedder_fullscreen_ = false; - bool plugin_can_save_ = false; diff --git extensions/browser/guest_view/mime_handler_view/mime_handler_view_guest_delegate.h extensions/browser/guest_view/mime_handler_view/mime_handler_view_guest_delegate.h -index 7f59e7925084e..777b8a3cf103a 100644 +index 7f59e7925084e..e3e69dc6d3a43 100644 --- extensions/browser/guest_view/mime_handler_view/mime_handler_view_guest_delegate.h +++ extensions/browser/guest_view/mime_handler_view/mime_handler_view_guest_delegate.h @@ -7,6 +7,8 @@ @@ -80,17 +37,13 @@ index 7f59e7925084e..777b8a3cf103a 100644 namespace content { class RenderFrameHost; struct ContextMenuParams; -@@ -25,6 +27,14 @@ class MimeHandlerViewGuestDelegate { +@@ -25,6 +27,10 @@ class MimeHandlerViewGuestDelegate { virtual ~MimeHandlerViewGuestDelegate() {} + // Provides an opportunity to supply a custom view implementation. + virtual void OverrideWebContentsCreateParams( + content::WebContents::CreateParams* params) {} -+ -+ // Called when a guest is attached or detached. -+ virtual void OnGuestAttached() {} -+ virtual void OnGuestDetached() {} + // Handles context menu, or returns false if unhandled. //