15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef CONTENT_PUBLIC_RENDERER_RENDER_VIEW_OBSERVER_H_ 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define CONTENT_PUBLIC_RENDERER_RENDER_VIEW_OBSERVER_H_ 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/basictypes.h" 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/compiler_specific.h" 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/common/content_export.h" 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ipc/ipc_listener.h" 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ipc/ipc_sender.h" 134e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "third_party/WebKit/public/platform/WebVector.h" 147d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) 157d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)class GURL; 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace ppapi { 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace host { 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class PpapiHost; 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 23f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)namespace blink { 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class WebDataSource; 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class WebFrame; 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class WebFormElement; 272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class WebGestureEvent; 280529e5d033099cbfc42635f6f6183833b09dff6eBen Murdochclass WebLocalFrame; 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class WebMouseEvent; 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class WebNode; 31f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)class WebString; 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class WebTouchEvent; 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class WebURL; 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct WebURLError; 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace content { 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class RendererPpapiHost; 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class RenderView; 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class RenderViewImpl; 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Base class for objects that want to filter incoming IPCs, and also get 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// notified of changes to the frame. 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class CONTENT_EXPORT RenderViewObserver : public IPC::Listener, 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public IPC::Sender { 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // By default, observers will be deleted when the RenderView goes away. If 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // they want to outlive it, they can override this function. 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void OnDestruct(); 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // These match the WebKit API notifications 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void DidStartLoading() {} 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void DidStopLoading() {} 55c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch virtual void DidFinishDocumentLoad(blink::WebLocalFrame* frame) {} 56c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch virtual void DidFailLoad(blink::WebLocalFrame* frame, 57f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const blink::WebURLError& error) {} 58c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch virtual void DidFinishLoad(blink::WebLocalFrame* frame) {} 59c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch virtual void DidStartProvisionalLoad(blink::WebLocalFrame* frame) {} 60c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch virtual void DidFailProvisionalLoad(blink::WebLocalFrame* frame, 61f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const blink::WebURLError& error) {} 62c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch virtual void DidCommitProvisionalLoad(blink::WebLocalFrame* frame, 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool is_new_navigation) {} 64cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) virtual void DidClearWindowObject(blink::WebLocalFrame* frame) {} 65c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch virtual void DidCreateDocumentElement(blink::WebLocalFrame* frame) {} 66c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch virtual void FrameCreated(blink::WebLocalFrame* parent, 67f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) blink::WebFrame* frame) {} 68f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) virtual void FrameDetached(blink::WebFrame* frame) {} 69f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) virtual void FrameWillClose(blink::WebFrame* frame) {} 704e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) virtual void DidMatchCSS( 71c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch blink::WebLocalFrame* frame, 72f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const blink::WebVector<blink::WebString>& newly_matching_selectors, 73f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const blink::WebVector<blink::WebString>& stopped_matching_selectors) {} 74c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch virtual void WillSendSubmitEvent(blink::WebLocalFrame* frame, 75f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const blink::WebFormElement& form) {} 76c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch virtual void WillSubmitForm(blink::WebLocalFrame* frame, 77f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const blink::WebFormElement& form) {} 78c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch virtual void DidCreateDataSource(blink::WebLocalFrame* frame, 79f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) blink::WebDataSource* ds) {} 80c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch virtual void PrintPage(blink::WebLocalFrame* frame, bool user_initiated) {} 81f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) virtual void FocusedNodeChanged(const blink::WebNode& node) {} 82c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch virtual void DidChangeScrollOffset(blink::WebLocalFrame* frame) {} 83f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) virtual void DraggableRegionsChanged(blink::WebFrame* frame) {} 842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void DidCommitCompositorFrame() {} 85d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) virtual void DidUpdateLayout() {} 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // These match the RenderView methods. 88f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) virtual void DidHandleMouseEvent(const blink::WebMouseEvent& event) {} 89f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) virtual void DidHandleTouchEvent(const blink::WebTouchEvent& event) {} 905f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) virtual void DidHandleGestureEvent(const blink::WebGestureEvent& event) {} 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // These match incoming IPCs. 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void Navigate(const GURL& url) {} 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void ClosePage() {} 95010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) virtual void OrientationChangeEvent() {} 961320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci virtual void Resized() {} 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 985d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) virtual void OnStop() {} 995d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // IPC::Listener implementation. 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE; 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // IPC::Sender implementation. 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual bool Send(IPC::Message* message) OVERRIDE; 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) RenderView* render_view() const; 107558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch int routing_id() const { return routing_id_; } 108558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch 109558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch protected: 110558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch explicit RenderViewObserver(RenderView* render_view); 111558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch virtual ~RenderViewObserver(); 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 113f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // Sets |render_view_| to track. 114f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // Removes itself of previous (if any) |render_view_| observer list and adds 115f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // to the new |render_view|. Since it assumes that observer outlives 116f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // render_view, OnDestruct should be overridden. 117f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) void Observe(RenderView* render_view); 118f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) friend class RenderViewImpl; 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // This is called by the RenderView when it's going away so that this object 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // can null out its pointer. 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void RenderViewGone(); 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RenderView* render_view_; 1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The routing ID of the associated RenderView. 1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int routing_id_; 1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(RenderViewObserver); 1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace content 1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // CONTENT_PUBLIC_RENDERER_RENDER_VIEW_OBSERVER_H_ 136