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 EXTENSIONS_RENDERER_EXTENSION_HELPER_H_
6#define EXTENSIONS_RENDERER_EXTENSION_HELPER_H_
7
8#include <vector>
9
10#include "content/public/common/console_message_level.h"
11#include "content/public/renderer/render_view_observer.h"
12#include "content/public/renderer/render_view_observer_tracker.h"
13#include "extensions/common/view_type.h"
14
15class GURL;
16class SkBitmap;
17struct ExtensionMsg_ExternalConnectionInfo;
18
19namespace base {
20class DictionaryValue;
21class ListValue;
22}
23
24namespace extensions {
25class Dispatcher;
26struct Message;
27
28// RenderView-level plumbing for extension features.
29class ExtensionHelper
30    : public content::RenderViewObserver,
31      public content::RenderViewObserverTracker<ExtensionHelper> {
32 public:
33  // Returns a list of extension RenderViews that match the given filter
34  // criteria. If |browser_window_id| is not extension_misc::kUnknownWindowId,
35  // the list is restricted to views in that browser window.
36  static std::vector<content::RenderView*> GetExtensionViews(
37      const std::string& extension_id,
38      int browser_window_id,
39      ViewType view_type);
40
41  // Returns the given extension's background page, or NULL if none.
42  static content::RenderView* GetBackgroundPage(
43      const std::string& extension_id);
44
45  ExtensionHelper(content::RenderView* render_view, Dispatcher* dispatcher);
46  virtual ~ExtensionHelper();
47
48  int tab_id() const { return tab_id_; }
49  int browser_window_id() const { return browser_window_id_; }
50  ViewType view_type() const { return view_type_; }
51  Dispatcher* dispatcher() const { return dispatcher_; }
52
53 private:
54  // RenderViewObserver implementation.
55  virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE;
56  virtual void DidCreateDocumentElement(blink::WebLocalFrame* frame) OVERRIDE;
57  virtual void DidMatchCSS(
58      blink::WebLocalFrame* frame,
59      const blink::WebVector<blink::WebString>& newly_matching_selectors,
60      const blink::WebVector<blink::WebString>& stopped_matching_selectors)
61      OVERRIDE;
62  virtual void DraggableRegionsChanged(blink::WebFrame* frame) OVERRIDE;
63
64  void OnExtensionResponse(int request_id, bool success,
65                           const base::ListValue& response,
66                           const std::string& error);
67  void OnExtensionMessageInvoke(const std::string& extension_id,
68                                const std::string& module_name,
69                                const std::string& function_name,
70                                const base::ListValue& args,
71                                bool user_gesture);
72  void OnExtensionDispatchOnConnect(
73      int target_port_id,
74      const std::string& channel_name,
75      const base::DictionaryValue& source_tab,
76      const ExtensionMsg_ExternalConnectionInfo& info,
77      const std::string& tls_channel_id);
78  void OnExtensionDeliverMessage(int target_port_id,
79                                 const Message& message);
80  void OnExtensionDispatchOnDisconnect(int port_id,
81                                       const std::string& error_message);
82  void OnNotifyRendererViewType(ViewType view_type);
83  void OnSetTabId(int tab_id);
84  void OnUpdateBrowserWindowId(int window_id);
85  void OnAddMessageToConsole(content::ConsoleMessageLevel level,
86                             const std::string& message);
87  void OnAppWindowClosed();
88  void OnSetFrameName(const std::string& name);
89
90  Dispatcher* dispatcher_;
91
92  // Type of view attached with RenderView.
93  ViewType view_type_;
94
95  // Id of the tab which the RenderView is attached to.
96  int tab_id_;
97
98  // Id number of browser window which RenderView is attached to.
99  int browser_window_id_;
100
101  DISALLOW_COPY_AND_ASSIGN(ExtensionHelper);
102};
103
104}  // namespace extensions
105
106#endif  // EXTENSIONS_RENDERER_EXTENSION_HELPER_H_
107