• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright 2013 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_RENDERER_PLUGINS_CHROME_PLUGIN_PLACEHOLDER_H_
6 #define CHROME_RENDERER_PLUGINS_CHROME_PLUGIN_PLACEHOLDER_H_
7 
8 #include "components/plugins/renderer/plugin_placeholder.h"
9 
10 struct ChromeViewHostMsg_GetPluginInfo_Status;
11 
12 class ChromePluginPlaceholder : public plugins::PluginPlaceholder,
13                                 public content::RenderProcessObserver,
14                                 public content::ContextMenuClient {
15  public:
16   static const char kPluginPlaceholderDataURL[];
17 
18   static ChromePluginPlaceholder* CreateBlockedPlugin(
19       content::RenderFrame* render_frame,
20       blink::WebFrame* frame,
21       const blink::WebPluginParams& params,
22       const content::WebPluginInfo& info,
23       const std::string& identifier,
24       const base::string16& name,
25       int resource_id,
26       const base::string16& message);
27 
28   // Creates a new WebViewPlugin with a MissingPlugin as a delegate.
29   static ChromePluginPlaceholder* CreateMissingPlugin(
30       content::RenderFrame* render_frame,
31       blink::WebFrame* frame,
32       const blink::WebPluginParams& params);
33 
34   static ChromePluginPlaceholder* CreateErrorPlugin(
35       content::RenderFrame* render_frame,
36       const base::FilePath& plugin_path);
37 
38   void SetStatus(const ChromeViewHostMsg_GetPluginInfo_Status& status);
39 
40 #if defined(ENABLE_PLUGIN_INSTALLATION)
41   int32 CreateRoutingId();
42 #endif
43 
44  private:
45   ChromePluginPlaceholder(content::RenderFrame* render_frame,
46                           blink::WebFrame* frame,
47                           const blink::WebPluginParams& params,
48                           const std::string& html_data,
49                           const base::string16& title);
50   virtual ~ChromePluginPlaceholder();
51 
52   // WebViewPlugin::Delegate (via PluginPlaceholder) method
53   virtual void BindWebFrame(blink::WebFrame* frame) OVERRIDE;
54 
55   // content::RenderViewObserver (via PluginPlaceholder) override:
56   virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE;
57 
58   // WebViewPlugin::Delegate (via PluginPlaceholder) methods:
59   virtual void ShowContextMenu(const blink::WebMouseEvent&) OVERRIDE;
60 
61   // content::RenderProcessObserver methods:
62   virtual void PluginListChanged() OVERRIDE;
63 
64   // content::ContextMenuClient methods:
65   virtual void OnMenuAction(int request_id, unsigned action) OVERRIDE;
66   virtual void OnMenuClosed(int request_id) OVERRIDE;
67 
68   // Javascript callback opens chrome://plugins in a new tab.
69   // Arguments are required by the caller, but not used.
70   void OpenAboutPluginsCallback(const webkit_glue::CppArgumentList& args,
71                                 webkit_glue::CppVariant* result);
72 
73   void OnLoadBlockedPlugins(const std::string& identifier);
74   void OnSetIsPrerendering(bool is_prerendering);
75 #if defined(ENABLE_PLUGIN_INSTALLATION)
76   void OnDidNotFindMissingPlugin();
77   void OnFoundMissingPlugin(const base::string16& plugin_name);
78   void OnStartedDownloadingPlugin();
79   void OnFinishedDownloadingPlugin();
80   void OnErrorDownloadingPlugin(const std::string& error);
81   void OnCancelledDownloadingPlugin();
82 #endif
83 
84   // We use a scoped_ptr so we can forward-declare the struct; it's defined in
85   // an IPC message file which can't be easily included in other header files.
86   scoped_ptr<ChromeViewHostMsg_GetPluginInfo_Status> status_;
87 
88   base::string16 title_;
89 
90 #if defined(ENABLE_PLUGIN_INSTALLATION)
91   // |routing_id()| is the routing ID of our associated RenderView, but we have
92   // a separate routing ID for messages specific to this placeholder.
93   int32 placeholder_routing_id_;
94 #endif
95 
96   bool has_host_;
97   int context_menu_request_id_;  // Nonzero when request pending.
98   base::string16 plugin_name_;
99 
100   // TODO(jam): remove this class, it's temporary until ContentSettingObserver
101   // is a RenderFrameObserver.
102   class RenderViewObserver;
103   scoped_ptr<RenderViewObserver> view_observer_;
104 
105   DISALLOW_COPY_AND_ASSIGN(ChromePluginPlaceholder);
106 };
107 
108 #endif  // CHROME_RENDERER_PLUGINS_CHROME_PLUGIN_PLACEHOLDER_H_
109