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