mirror of
				https://bitbucket.org/chromiumembedded/cef
				synced 2025-06-05 21:39:12 +02:00 
			
		
		
		
	Also perform related C++ cleanup:
- Use =default instead of {} for default implementations of
  constructors/destructors.
- Replace typedef with using.
		
	
		
			
				
	
	
		
			134 lines
		
	
	
		
			4.3 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			134 lines
		
	
	
		
			4.3 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| // Copyright 2015 The Chromium Embedded Framework Authors. All rights reserved.
 | |
| // Use of this source code is governed by a BSD-style license that can
 | |
| // be found in the LICENSE file.
 | |
| 
 | |
| #ifndef CEF_LIBCEF_RENDERER_RENDER_MANAGER_H_
 | |
| #define CEF_LIBCEF_RENDERER_RENDER_MANAGER_H_
 | |
| #pragma once
 | |
| 
 | |
| #include <map>
 | |
| #include <memory>
 | |
| 
 | |
| #include "include/internal/cef_ptr.h"
 | |
| 
 | |
| #include "cef/libcef/common/mojom/cef.mojom.h"
 | |
| #include "mojo/public/cpp/bindings/pending_receiver.h"
 | |
| #include "mojo/public/cpp/bindings/receiver_set.h"
 | |
| #include "mojo/public/cpp/bindings/remote.h"
 | |
| #include "third_party/abseil-cpp/absl/types/optional.h"
 | |
| 
 | |
| namespace blink {
 | |
| class WebFrame;
 | |
| class WebView;
 | |
| }  // namespace blink
 | |
| 
 | |
| namespace content {
 | |
| class RenderFrame;
 | |
| class RenderView;
 | |
| }  // namespace content
 | |
| 
 | |
| namespace mojo {
 | |
| class BinderMap;
 | |
| }  // namespace mojo
 | |
| 
 | |
| class CefBrowserImpl;
 | |
| class CefGuestView;
 | |
| class CefRenderFrameObserver;
 | |
| 
 | |
| // Singleton object for managing BrowserImpl instances. Only accessed on the
 | |
| // main renderer thread.
 | |
| class CefRenderManager : public cef::mojom::RenderManager {
 | |
|  public:
 | |
|   CefRenderManager();
 | |
| 
 | |
|   CefRenderManager(const CefRenderManager&) = delete;
 | |
|   CefRenderManager& operator=(const CefRenderManager&) = delete;
 | |
| 
 | |
|   ~CefRenderManager();
 | |
| 
 | |
|   // Returns this singleton instance of this class.
 | |
|   static CefRenderManager* Get();
 | |
| 
 | |
|   // Called from ContentRendererClient methods of the same name.
 | |
|   void RenderThreadConnected();
 | |
|   void RenderFrameCreated(content::RenderFrame* render_frame,
 | |
|                           CefRenderFrameObserver* render_frame_observer,
 | |
|                           bool& browser_created,
 | |
|                           absl::optional<bool>& is_windowless);
 | |
|   void WebViewCreated(blink::WebView* web_view,
 | |
|                       bool& browser_created,
 | |
|                       absl::optional<bool>& is_windowless);
 | |
|   void DevToolsAgentAttached();
 | |
|   void DevToolsAgentDetached();
 | |
|   void ExposeInterfacesToBrowser(mojo::BinderMap* binders);
 | |
| 
 | |
|   // Returns the browser associated with the specified RenderView.
 | |
|   CefRefPtr<CefBrowserImpl> GetBrowserForView(content::RenderView* view);
 | |
| 
 | |
|   // Returns the browser associated with the specified main WebFrame.
 | |
|   CefRefPtr<CefBrowserImpl> GetBrowserForMainFrame(blink::WebFrame* frame);
 | |
| 
 | |
|   // Connects to CefBrowserManager in the browser process.
 | |
|   mojo::Remote<cef::mojom::BrowserManager>& GetBrowserManager();
 | |
| 
 | |
|   // Returns true if this renderer process is hosting an extension.
 | |
|   static bool IsExtensionProcess();
 | |
| 
 | |
|   // Returns true if this renderer process is hosting a PDF.
 | |
|   static bool IsPdfProcess();
 | |
| 
 | |
|  private:
 | |
|   friend class CefBrowserImpl;
 | |
|   friend class CefGuestView;
 | |
| 
 | |
|   // Binds receivers for the RenderManager interface.
 | |
|   void BindReceiver(mojo::PendingReceiver<cef::mojom::RenderManager> receiver);
 | |
| 
 | |
|   // cef::mojom::RenderManager methods:
 | |
|   void ModifyCrossOriginWhitelistEntry(
 | |
|       bool add,
 | |
|       cef::mojom::CrossOriginWhiteListEntryPtr entry) override;
 | |
|   void ClearCrossOriginWhitelist() override;
 | |
| 
 | |
|   void WebKitInitialized();
 | |
| 
 | |
|   // Maybe create a new browser object, return the existing one, or return
 | |
|   // nullptr for guest views.
 | |
|   CefRefPtr<CefBrowserImpl> MaybeCreateBrowser(
 | |
|       content::RenderView* render_view,
 | |
|       content::RenderFrame* render_frame,
 | |
|       bool* browser_created,
 | |
|       absl::optional<bool>* is_windowless);
 | |
| 
 | |
|   // Called from CefBrowserImpl::OnDestruct().
 | |
|   void OnBrowserDestroyed(CefBrowserImpl* browser);
 | |
| 
 | |
|   // Returns the guest view associated with the specified RenderView if any.
 | |
|   CefGuestView* GetGuestViewForView(content::RenderView* view);
 | |
| 
 | |
|   // Called from CefGuestView::OnDestruct().
 | |
|   void OnGuestViewDestroyed(CefGuestView* guest_view);
 | |
| 
 | |
|   // Map of RenderView pointers to CefBrowserImpl references.
 | |
|   using BrowserMap = std::map<content::RenderView*, CefRefPtr<CefBrowserImpl>>;
 | |
|   BrowserMap browsers_;
 | |
| 
 | |
|   // Map of RenderView poiners to CefGuestView implementations.
 | |
|   using GuestViewMap =
 | |
|       std::map<content::RenderView*, std::unique_ptr<CefGuestView>>;
 | |
|   GuestViewMap guest_views_;
 | |
| 
 | |
|   // Cross-origin white list entries that need to be registered with WebKit.
 | |
|   std::vector<cef::mojom::CrossOriginWhiteListEntryPtr>
 | |
|       cross_origin_whitelist_entries_;
 | |
| 
 | |
|   int devtools_agent_count_ = 0;
 | |
|   int uncaught_exception_stack_size_ = 0;
 | |
| 
 | |
|   mojo::ReceiverSet<cef::mojom::RenderManager> receivers_;
 | |
| 
 | |
|   mojo::Remote<cef::mojom::BrowserManager> browser_manager_;
 | |
| };
 | |
| 
 | |
| #endif  // CEF_LIBCEF_RENDERER_RENDER_MANAGER_H_
 |