mirror of
				https://bitbucket.org/chromiumembedded/cef
				synced 2025-06-05 21:39:12 +02:00 
			
		
		
		
	
		
			
				
	
	
		
			129 lines
		
	
	
		
			4.3 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			129 lines
		
	
	
		
			4.3 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| // Copyright (c) 2012 The Chromium Embedded Framework Authors.
 | |
| // Portions copyright (c) 2011 The Chromium 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_BROWSER_IMPL_H_
 | |
| #define CEF_LIBCEF_RENDERER_BROWSER_IMPL_H_
 | |
| #pragma once
 | |
| 
 | |
| #include <stdint.h>
 | |
| 
 | |
| #include <map>
 | |
| #include <memory>
 | |
| #include <string>
 | |
| #include <vector>
 | |
| 
 | |
| #include "include/cef_browser.h"
 | |
| #include "include/cef_client.h"
 | |
| #include "libcef/common/tracker.h"
 | |
| #include "libcef/renderer/frame_impl.h"
 | |
| 
 | |
| #include "content/public/renderer/render_view_observer.h"
 | |
| 
 | |
| namespace blink {
 | |
| class WebFrame;
 | |
| class WebNode;
 | |
| }  // namespace blink
 | |
| 
 | |
| // Renderer plumbing for CEF features. There is a one-to-one relationship
 | |
| // between RenderView on the renderer side and RenderViewHost on the browser
 | |
| // side.
 | |
| //
 | |
| // RenderViewObserver: Interface for observing RenderView notifications.
 | |
| class CefBrowserImpl : public CefBrowser, public content::RenderViewObserver {
 | |
|  public:
 | |
|   // Returns the browser associated with the specified RenderView.
 | |
|   static CefRefPtr<CefBrowserImpl> GetBrowserForView(content::RenderView* view);
 | |
|   // Returns the browser associated with the specified main WebFrame.
 | |
|   static CefRefPtr<CefBrowserImpl> GetBrowserForMainFrame(
 | |
|       blink::WebFrame* frame);
 | |
| 
 | |
|   // CefBrowser methods.
 | |
|   CefRefPtr<CefBrowserHost> GetHost() override;
 | |
|   bool CanGoBack() override;
 | |
|   void GoBack() override;
 | |
|   bool CanGoForward() override;
 | |
|   void GoForward() override;
 | |
|   bool IsLoading() override;
 | |
|   void Reload() override;
 | |
|   void ReloadIgnoreCache() override;
 | |
|   void StopLoad() override;
 | |
|   int GetIdentifier() override;
 | |
|   bool IsSame(CefRefPtr<CefBrowser> that) override;
 | |
|   bool IsPopup() override;
 | |
|   bool HasDocument() override;
 | |
|   CefRefPtr<CefFrame> GetMainFrame() override;
 | |
|   CefRefPtr<CefFrame> GetFocusedFrame() override;
 | |
|   CefRefPtr<CefFrame> GetFrame(int64 identifier) override;
 | |
|   CefRefPtr<CefFrame> GetFrame(const CefString& name) override;
 | |
|   size_t GetFrameCount() override;
 | |
|   void GetFrameIdentifiers(std::vector<int64>& identifiers) override;
 | |
|   void GetFrameNames(std::vector<CefString>& names) override;
 | |
| 
 | |
|   CefBrowserImpl(content::RenderView* render_view,
 | |
|                  int browser_id,
 | |
|                  bool is_popup,
 | |
|                  bool is_windowless);
 | |
|   ~CefBrowserImpl() override;
 | |
| 
 | |
|   // Returns the matching CefFrameImpl reference or creates a new one.
 | |
|   CefRefPtr<CefFrameImpl> GetWebFrameImpl(blink::WebLocalFrame* frame);
 | |
|   CefRefPtr<CefFrameImpl> GetWebFrameImpl(int64_t frame_id);
 | |
| 
 | |
|   // Frame objects will be deleted immediately before the frame is closed.
 | |
|   void AddFrameObject(int64_t frame_id, CefTrackNode* tracked_object);
 | |
| 
 | |
|   int browser_id() const { return browser_id_; }
 | |
|   bool is_popup() const { return is_popup_; }
 | |
|   bool is_windowless() const { return is_windowless_; }
 | |
|   content::RenderView* render_view() const {
 | |
|     return content::RenderViewObserver::render_view();
 | |
|   }
 | |
| 
 | |
|   // RenderViewObserver methods.
 | |
|   void OnDestruct() override;
 | |
|   void FrameDetached(int64_t frame_id);
 | |
| 
 | |
|   void OnLoadingStateChange(bool isLoading);
 | |
| 
 | |
|  private:
 | |
|   // ID of the browser that this RenderView is associated with. During loading
 | |
|   // of cross-origin requests multiple RenderViews may be associated with the
 | |
|   // same browser ID.
 | |
|   int browser_id_;
 | |
|   bool is_popup_;
 | |
|   bool is_windowless_;
 | |
| 
 | |
|   // Map of unique frame ids to CefFrameImpl references.
 | |
|   typedef std::map<int64, CefRefPtr<CefFrameImpl>> FrameMap;
 | |
|   FrameMap frames_;
 | |
| 
 | |
|   // Map of unique frame ids to CefTrackManager objects that need to be cleaned
 | |
|   // up when the frame is deleted.
 | |
|   typedef std::map<int64, CefRefPtr<CefTrackManager>> FrameObjectMap;
 | |
|   FrameObjectMap frame_objects_;
 | |
| 
 | |
|   struct LoadingState {
 | |
|     LoadingState(bool is_loading, bool can_go_back, bool can_go_forward)
 | |
|         : is_loading_(is_loading),
 | |
|           can_go_back_(can_go_back),
 | |
|           can_go_forward_(can_go_forward) {}
 | |
| 
 | |
|     bool IsMatch(bool is_loading, bool can_go_back, bool can_go_forward) const {
 | |
|       return is_loading_ == is_loading && can_go_back_ == can_go_back &&
 | |
|              can_go_forward_ == can_go_forward;
 | |
|     }
 | |
| 
 | |
|     bool is_loading_;
 | |
|     bool can_go_back_;
 | |
|     bool can_go_forward_;
 | |
|   };
 | |
|   std::unique_ptr<LoadingState> last_loading_state_;
 | |
| 
 | |
|   IMPLEMENT_REFCOUNTING(CefBrowserImpl);
 | |
|   DISALLOW_COPY_AND_ASSIGN(CefBrowserImpl);
 | |
| };
 | |
| 
 | |
| #endif  // CEF_LIBCEF_RENDERER_BROWSER_IMPL_H_
 |