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