| // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef CONTENT_PUBLIC_BROWSER_WEB_CONTENTS_OBSERVER_H_ |
| #define CONTENT_PUBLIC_BROWSER_WEB_CONTENTS_OBSERVER_H_ |
| |
| #include "base/process_util.h" |
| #include "content/common/content_export.h" |
| #include "content/public/browser/navigation_controller.h" |
| #include "content/public/common/page_transition_types.h" |
| #include "ipc/ipc_channel.h" |
| #include "webkit/glue/window_open_disposition.h" |
| |
| class WebContentsImpl; |
| |
| namespace content { |
| |
| class RenderViewHost; |
| class WebContents; |
| struct FrameNavigateParams; |
| struct LoadCommittedDetails; |
| struct Referrer; |
| |
| // An observer API implemented by classes which are interested in various page |
| // load events from WebContents. They also get a chance to filter IPC messages. |
| class CONTENT_EXPORT WebContentsObserver : public IPC::Channel::Listener, |
| public IPC::Message::Sender { |
| public: |
| virtual void RenderViewCreated(RenderViewHost* render_view_host) {} |
| virtual void RenderViewDeleted(RenderViewHost* render_view_host) {} |
| virtual void RenderViewReady() {} |
| virtual void RenderViewGone(base::TerminationStatus status) {} |
| virtual void NavigateToPendingEntry( |
| const GURL& url, |
| NavigationController::ReloadType reload_type) {} |
| virtual void DidNavigateMainFrame( |
| const LoadCommittedDetails& details, |
| const FrameNavigateParams& params) {} |
| virtual void DidNavigateAnyFrame( |
| const LoadCommittedDetails& details, |
| const FrameNavigateParams& params) {} |
| // |render_view_host| is the RenderViewHost for which the provisional load is |
| // happening. |
| virtual void DidStartProvisionalLoadForFrame( |
| int64 frame_id, |
| bool is_main_frame, |
| const GURL& validated_url, |
| bool is_error_page, |
| RenderViewHost* render_view_host) {} |
| virtual void ProvisionalChangeToMainFrameUrl(const GURL& url, |
| const GURL& opener_url) {} |
| virtual void DidCommitProvisionalLoadForFrame( |
| int64 frame_id, |
| bool is_main_frame, |
| const GURL& url, |
| PageTransition transition_type) {} |
| virtual void DidFailProvisionalLoad(int64 frame_id, |
| bool is_main_frame, |
| const GURL& validated_url, |
| int error_code, |
| const string16& error_description) {} |
| virtual void DocumentAvailableInMainFrame() {} |
| virtual void DocumentLoadedInFrame(int64 frame_id) {} |
| virtual void DidFinishLoad(int64 frame_id, |
| const GURL& validated_url, |
| bool is_main_frame) {} |
| virtual void DidFailLoad(int64 frame_id, |
| const GURL& validated_url, |
| bool is_main_frame, |
| int error_code, |
| const string16& error_description) {} |
| virtual void DidGetUserGesture() {} |
| virtual void DidGetIgnoredUIEvent() {} |
| virtual void DidBecomeSelected() {} |
| |
| virtual void DidStartLoading() {} |
| virtual void DidStopLoading() {} |
| virtual void StopNavigation() {} |
| |
| virtual void DidOpenURL(const GURL& url, |
| const Referrer& referrer, |
| WindowOpenDisposition disposition, |
| PageTransition transition) {} |
| |
| virtual void DidOpenRequestedURL(WebContents* new_contents, |
| const GURL& url, |
| const Referrer& referrer, |
| WindowOpenDisposition disposition, |
| PageTransition transition, |
| int64 source_frame_id) {} |
| |
| virtual void AppCacheAccessed(const GURL& manifest_url, |
| bool blocked_by_policy) {} |
| |
| // Notification that a plugin has crashed. |
| virtual void PluginCrashed(const FilePath& plugin_path) {} |
| |
| // Notication that the given plugin has hung or become unhung. This |
| // notification is only for Pepper plugins. |
| // |
| // The plugin_child_id is the unique child process ID from the plugin. Note |
| // that this ID is supplied by the renderer, so should be validated before |
| // it's used for anything in case there's an exploited renderer. |
| virtual void PluginHungStatusChanged(int plugin_child_id, |
| const FilePath& plugin_path, |
| bool is_hung) {} |
| |
| // Invoked when the WebContents is being destroyed. Gives subclasses a chance |
| // to cleanup. At the time this is invoked |web_contents()| returns NULL. |
| // It is safe to delete 'this' from here. |
| virtual void WebContentsDestroyed(WebContents* web_contents) {} |
| |
| // IPC::Channel::Listener implementation. |
| virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE; |
| |
| // IPC::Message::Sender implementation. |
| virtual bool Send(IPC::Message* message) OVERRIDE; |
| int routing_id() const; |
| |
| protected: |
| // Use this constructor when the object is tied to a single WebContents for |
| // its entire lifetime. |
| explicit WebContentsObserver(WebContents* web_contents); |
| |
| // Use this constructor when the object wants to observe a WebContents for |
| // part of its lifetime. It can then call Observe() to start and stop |
| // observing. |
| WebContentsObserver(); |
| |
| virtual ~WebContentsObserver(); |
| |
| // Start observing a different WebContents; used with the default constructor. |
| void Observe(WebContents* web_contents); |
| |
| WebContents* web_contents() const; |
| |
| private: |
| friend class ::WebContentsImpl; |
| |
| // Invoked from WebContentsImpl. Invokes WebContentsDestroyed and NULL out |
| // |web_contents_|. |
| void WebContentsImplDestroyed(); |
| |
| WebContentsImpl* web_contents_; |
| |
| DISALLOW_COPY_AND_ASSIGN(WebContentsObserver); |
| }; |
| |
| } // namespace content |
| |
| #endif // CONTENT_PUBLIC_BROWSER_WEB_CONTENTS_OBSERVER_H_ |