1// Copyright 2014 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 CHROME_BROWSER_EXTENSIONS_CHROME_EXTENSION_WEB_CONTENTS_OBSERVER_H_
6#define CHROME_BROWSER_EXTENSIONS_CHROME_EXTENSION_WEB_CONTENTS_OBSERVER_H_
7
8#include "base/compiler_specific.h"
9#include "base/strings/string16.h"
10#include "content/public/browser/web_contents_user_data.h"
11#include "extensions/browser/extension_web_contents_observer.h"
12#include "extensions/common/stack_frame.h"
13
14namespace content {
15class RenderFrameHost;
16}
17
18namespace extensions {
19
20// An ExtensionWebContentsObserver that adds support for the extension error
21// console, reloading crashed extensions and routing extension messages between
22// renderers.
23class ChromeExtensionWebContentsObserver
24    : public ExtensionWebContentsObserver,
25      public content::WebContentsUserData<ChromeExtensionWebContentsObserver> {
26 private:
27  friend class content::WebContentsUserData<ChromeExtensionWebContentsObserver>;
28
29  explicit ChromeExtensionWebContentsObserver(
30      content::WebContents* web_contents);
31  virtual ~ChromeExtensionWebContentsObserver();
32
33  // content::WebContentsObserver overrides.
34  virtual void RenderViewCreated(content::RenderViewHost* render_view_host)
35      OVERRIDE;
36  virtual bool OnMessageReceived(
37      const IPC::Message& message,
38      content::RenderFrameHost* render_frame_host) OVERRIDE;
39
40  // Adds a message to the extensions ErrorConsole.
41  void OnDetailedConsoleMessageAdded(const base::string16& message,
42                                     const base::string16& source,
43                                     const StackTrace& stack_trace,
44                                     int32 severity_level);
45
46  // Reloads an extension if it is on the terminated list.
47  void ReloadIfTerminated(content::RenderViewHost* render_view_host);
48
49  DISALLOW_COPY_AND_ASSIGN(ChromeExtensionWebContentsObserver);
50};
51
52}  // namespace extensions
53
54#endif  // CHROME_BROWSER_EXTENSIONS_CHROME_EXTENSION_WEB_CONTENTS_OBSERVER_H_
55