1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #ifndef CONTENT_PUBLIC_RENDERER_RENDER_VIEW_OBSERVER_H_ 6 #define CONTENT_PUBLIC_RENDERER_RENDER_VIEW_OBSERVER_H_ 7 8 #include "base/basictypes.h" 9 #include "base/compiler_specific.h" 10 #include "content/common/content_export.h" 11 #include "ipc/ipc_listener.h" 12 #include "ipc/ipc_sender.h" 13 #include "third_party/WebKit/public/web/WebIconURL.h" 14 15 class GURL; 16 17 namespace ppapi { 18 namespace host { 19 class PpapiHost; 20 } 21 } 22 23 namespace WebKit { 24 class WebDataSource; 25 class WebFrame; 26 class WebFormElement; 27 class WebGestureEvent; 28 class WebMediaPlayerClient; 29 class WebMouseEvent; 30 class WebNode; 31 class WebTouchEvent; 32 class WebURL; 33 struct WebContextMenuData; 34 struct WebURLError; 35 } 36 37 namespace content { 38 39 class RendererPpapiHost; 40 class RenderView; 41 class RenderViewImpl; 42 43 // Base class for objects that want to filter incoming IPCs, and also get 44 // notified of changes to the frame. 45 class CONTENT_EXPORT RenderViewObserver : public IPC::Listener, 46 public IPC::Sender { 47 public: 48 // By default, observers will be deleted when the RenderView goes away. If 49 // they want to outlive it, they can override this function. 50 virtual void OnDestruct(); 51 52 // These match the WebKit API notifications 53 virtual void DidStartLoading() {} 54 virtual void DidStopLoading() {} 55 virtual void DidFinishDocumentLoad(WebKit::WebFrame* frame) {} 56 virtual void DidFailLoad(WebKit::WebFrame* frame, 57 const WebKit::WebURLError& error) {} 58 virtual void DidFinishLoad(WebKit::WebFrame* frame) {} 59 virtual void DidStartProvisionalLoad(WebKit::WebFrame* frame) {} 60 virtual void DidFailProvisionalLoad(WebKit::WebFrame* frame, 61 const WebKit::WebURLError& error) {} 62 virtual void DidCommitProvisionalLoad(WebKit::WebFrame* frame, 63 bool is_new_navigation) {} 64 virtual void DidClearWindowObject(WebKit::WebFrame* frame) {} 65 virtual void DidCreateDocumentElement(WebKit::WebFrame* frame) {} 66 virtual void FrameCreated(WebKit::WebFrame* parent, 67 WebKit::WebFrame* frame) {} 68 virtual void FrameDetached(WebKit::WebFrame* frame) {} 69 virtual void FrameWillClose(WebKit::WebFrame* frame) {} 70 virtual void WillSubmitForm(WebKit::WebFrame* frame, 71 const WebKit::WebFormElement& form) {} 72 virtual void DidCreateDataSource(WebKit::WebFrame* frame, 73 WebKit::WebDataSource* ds) {} 74 virtual void PrintPage(WebKit::WebFrame* frame, bool user_initiated) {} 75 virtual void FocusedNodeChanged(const WebKit::WebNode& node) {} 76 virtual void WillCreateMediaPlayer(WebKit::WebFrame* frame, 77 WebKit::WebMediaPlayerClient* client) {} 78 virtual void ZoomLevelChanged() {}; 79 virtual void DidChangeScrollOffset(WebKit::WebFrame* frame) {} 80 virtual void DraggableRegionsChanged(WebKit::WebFrame* frame) {} 81 virtual void DidRequestShowContextMenu( 82 WebKit::WebFrame* frame, 83 const WebKit::WebContextMenuData& data) {} 84 virtual void DidCommitCompositorFrame() {} 85 virtual void DidUpdateLayout() {} 86 87 // These match the RenderView methods. 88 virtual void DidHandleMouseEvent(const WebKit::WebMouseEvent& event) {} 89 virtual void DidHandleTouchEvent(const WebKit::WebTouchEvent& event) {} 90 virtual void DidHandleGestureEvent(const WebKit::WebGestureEvent& event) {} 91 virtual void DidCreatePepperPlugin(RendererPpapiHost* host) {} 92 93 // These match incoming IPCs. 94 virtual void Navigate(const GURL& url) {} 95 virtual void ClosePage() {} 96 97 // IPC::Listener implementation. 98 virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE; 99 100 // IPC::Sender implementation. 101 virtual bool Send(IPC::Message* message) OVERRIDE; 102 103 RenderView* render_view() const; 104 int routing_id() const { return routing_id_; } 105 106 protected: 107 explicit RenderViewObserver(RenderView* render_view); 108 virtual ~RenderViewObserver(); 109 110 private: 111 friend class RenderViewImpl; 112 113 // This is called by the RenderView when it's going away so that this object 114 // can null out its pointer. 115 void RenderViewGone(); 116 117 RenderView* render_view_; 118 // The routing ID of the associated RenderView. 119 int routing_id_; 120 121 DISALLOW_COPY_AND_ASSIGN(RenderViewObserver); 122 }; 123 124 } // namespace content 125 126 #endif // CONTENT_PUBLIC_RENDERER_RENDER_VIEW_OBSERVER_H_ 127