• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright (c) 2012 The Chromium Embedded Framework Authors. All rights
2 // reserved. Use of this source code is governed by a BSD-style license that can
3 // be found in the LICENSE file.
4 
5 #ifndef CEF_LIBCEF_RENDERER_FRAME_IMPL_H_
6 #define CEF_LIBCEF_RENDERER_FRAME_IMPL_H_
7 #pragma once
8 
9 #include <string>
10 #include "include/cef_frame.h"
11 #include "include/cef_v8.h"
12 
13 namespace base {
14 class ListValue;
15 }
16 
17 namespace blink {
18 class ResourceLoadInfoNotifierWrapper;
19 class WebLocalFrame;
20 class WebURLLoader;
21 class WebURLLoaderFactory;
22 }  // namespace blink
23 
24 namespace IPC {
25 class Message;
26 }
27 
28 class GURL;
29 
30 class CefBrowserImpl;
31 class CefResponseManager;
32 struct CefMsg_LoadRequest_Params;
33 struct Cef_Request_Params;
34 struct Cef_Response_Params;
35 
36 // Implementation of CefFrame. CefFrameImpl objects are owned by the
37 // CefBrowerImpl and will be detached when the browser is notified that the
38 // associated renderer WebFrame will close.
39 class CefFrameImpl : public CefFrame {
40  public:
41   CefFrameImpl(CefBrowserImpl* browser,
42                blink::WebLocalFrame* frame,
43                int64_t frame_id);
44   ~CefFrameImpl() override;
45 
46   // CefFrame implementation.
47   bool IsValid() override;
48   void Undo() override;
49   void Redo() override;
50   void Cut() override;
51   void Copy() override;
52   void Paste() override;
53   void Delete() override;
54   void SelectAll() override;
55   void ViewSource() override;
56   void GetSource(CefRefPtr<CefStringVisitor> visitor) override;
57   void GetText(CefRefPtr<CefStringVisitor> visitor) override;
58   void LoadRequest(CefRefPtr<CefRequest> request) override;
59   void LoadURL(const CefString& url) override;
60   void ExecuteJavaScript(const CefString& jsCode,
61                          const CefString& scriptUrl,
62                          int startLine) override;
63   bool IsMain() override;
64   bool IsFocused() override;
65   CefString GetName() override;
66   int64 GetIdentifier() override;
67   CefRefPtr<CefFrame> GetParent() override;
68   CefString GetURL() override;
69   CefRefPtr<CefBrowser> GetBrowser() override;
70   CefRefPtr<CefV8Context> GetV8Context() override;
71   void VisitDOM(CefRefPtr<CefDOMVisitor> visitor) override;
72   CefRefPtr<CefURLRequest> CreateURLRequest(
73       CefRefPtr<CefRequest> request,
74       CefRefPtr<CefURLRequestClient> client) override;
75   void SendProcessMessage(CefProcessId target_process,
76                           CefRefPtr<CefProcessMessage> message) override;
77 
78   // Used by CefRenderURLRequest.
79   std::unique_ptr<blink::WebURLLoader> CreateURLLoader();
80   std::unique_ptr<blink::ResourceLoadInfoNotifierWrapper>
81   CreateResourceLoadInfoNotifierWrapper();
82 
83   // Forwarded from CefRenderFrameObserver.
84   void OnAttached();
85   bool OnMessageReceived(const IPC::Message& message);
86   void OnDidFinishLoad();
87   void OnDraggableRegionsChanged();
88   void OnDetached();
89 
web_frame()90   blink::WebLocalFrame* web_frame() const { return frame_; }
91 
92  private:
93   void ExecuteCommand(const std::string& command);
94 
95   // Avoids unnecessary string type conversions.
96   void SendProcessMessage(CefProcessId target_process,
97                           const std::string& name,
98                           base::ListValue* arguments,
99                           bool user_initiated);
100 
101   // Send a message to the RenderFrame associated with this frame.
102   void Send(IPC::Message* message);
103 
104   // OnMessageReceived message handlers.
105   void OnRequest(const Cef_Request_Params& params);
106   void OnResponse(const Cef_Response_Params& params);
107   void OnResponseAck(int request_id);
108   void OnDidStopLoading();
109   void OnMoveOrResizeStarted();
110   void OnLoadRequest(const CefMsg_LoadRequest_Params& params);
111 
112   CefBrowserImpl* browser_;
113   blink::WebLocalFrame* frame_;
114   const int64 frame_id_;
115 
116   std::unique_ptr<blink::WebURLLoaderFactory> url_loader_factory_;
117 
118   // Manages response registrations.
119   std::unique_ptr<CefResponseManager> response_manager_;
120 
121   IMPLEMENT_REFCOUNTING(CefFrameImpl);
122   DISALLOW_COPY_AND_ASSIGN(CefFrameImpl);
123 };
124 
125 #endif  // CEF_LIBCEF_RENDERER_FRAME_IMPL_H_
126