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