OLD | NEW |
(Empty) | |
| 1 // Copyright (c) 2012 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 COMPONENTS_PLUGINS_RENDERER_PLUGIN_PLACEHOLDER_H_ |
| 6 #define COMPONENTS_PLUGINS_RENDERER_PLUGIN_PLACEHOLDER_H_ |
| 7 |
| 8 #include "components/plugins/renderer/webview_plugin.h" |
| 9 #include "content/public/common/webplugininfo.h" |
| 10 #include "content/public/renderer/context_menu_client.h" |
| 11 #include "content/public/renderer/render_process_observer.h" |
| 12 #include "content/public/renderer/render_view_observer.h" |
| 13 #include "third_party/WebKit/public/web/WebPluginParams.h" |
| 14 #include "webkit/renderer/cpp_bound_class.h" |
| 15 |
| 16 namespace content { |
| 17 struct WebPluginInfo; |
| 18 } |
| 19 |
| 20 namespace plugins { |
| 21 // Placeholders can be used if a plug-in is missing or not available |
| 22 // (blocked or disabled). |
| 23 class PluginPlaceholder : public content::RenderViewObserver, |
| 24 public webkit_glue::CppBoundClass, |
| 25 public WebViewPlugin::Delegate { |
| 26 public: |
| 27 |
| 28 WebViewPlugin* plugin() { return plugin_; } |
| 29 |
| 30 void set_blocked_for_prerendering(bool blocked_for_prerendering) { |
| 31 is_blocked_for_prerendering_ = blocked_for_prerendering; |
| 32 } |
| 33 |
| 34 void set_allow_loading(bool allow_loading) { allow_loading_ = allow_loading; } |
| 35 |
| 36 protected: |
| 37 // |render_view| and |frame| are weak pointers. If either one is going away, |
| 38 // our |plugin_| will be destroyed as well and will notify us. |
| 39 PluginPlaceholder(content::RenderView* render_view, |
| 40 WebKit::WebFrame* frame, |
| 41 const WebKit::WebPluginParams& params, |
| 42 const std::string& html_data, |
| 43 GURL placeholderDataUrl); |
| 44 |
| 45 virtual ~PluginPlaceholder(); |
| 46 |
| 47 void OnLoadBlockedPlugins(const std::string& identifier); |
| 48 void OnSetIsPrerendering(bool is_prerendering); |
| 49 |
| 50 void SetMessage(const string16& message); |
| 51 void SetPluginInfo(const content::WebPluginInfo& plugin_info); |
| 52 const content::WebPluginInfo& GetPluginInfo() const; |
| 53 void SetIdentifier(const std::string& identifier); |
| 54 WebKit::WebFrame* GetFrame(); |
| 55 const WebKit::WebPluginParams& GetPluginParams() const; |
| 56 bool LoadingAllowed() const { return allow_loading_; } |
| 57 |
| 58 // Replace this placeholder with a different plugin (which could be |
| 59 // a placeholder again). |
| 60 void ReplacePlugin(WebKit::WebPlugin* new_plugin); |
| 61 |
| 62 // Hide this placeholder. |
| 63 void HidePlugin(); |
| 64 |
| 65 // Load the blocked plugin. |
| 66 void LoadPlugin(); |
| 67 |
| 68 // WebViewPlugin::Delegate method: |
| 69 virtual void BindWebFrame(WebKit::WebFrame* frame) OVERRIDE; |
| 70 |
| 71 private: |
| 72 // WebViewPlugin::Delegate methods: |
| 73 virtual void WillDestroyPlugin() OVERRIDE; |
| 74 virtual void ShowContextMenu(const WebKit::WebMouseEvent&) OVERRIDE; |
| 75 |
| 76 // Javascript callbacks: |
| 77 // All ignore arguments (which are, however, required by caller) and return |
| 78 // nothing. |
| 79 |
| 80 // Load the blocked plugin by calling LoadPlugin(). |
| 81 void LoadCallback(const webkit_glue::CppArgumentList& args, |
| 82 webkit_glue::CppVariant* result); |
| 83 |
| 84 // Hide the blocked plugin by calling HidePlugin(). |
| 85 void HideCallback(const webkit_glue::CppArgumentList& args, |
| 86 webkit_glue::CppVariant* result); |
| 87 |
| 88 void DidFinishLoadingCallback(const webkit_glue::CppArgumentList& args, |
| 89 webkit_glue::CppVariant* result); |
| 90 |
| 91 void UpdateMessage(); |
| 92 |
| 93 WebKit::WebFrame* frame_; |
| 94 WebKit::WebPluginParams plugin_params_; |
| 95 WebViewPlugin* plugin_; |
| 96 |
| 97 content::WebPluginInfo plugin_info_; |
| 98 |
| 99 string16 message_; |
| 100 |
| 101 // True iff the plugin was blocked because the page was being prerendered. |
| 102 // Plugin will automatically be loaded when the page is displayed. |
| 103 bool is_blocked_for_prerendering_; |
| 104 bool allow_loading_; |
| 105 |
| 106 bool hidden_; |
| 107 bool finished_loading_; |
| 108 std::string identifier_; |
| 109 |
| 110 DISALLOW_COPY_AND_ASSIGN(PluginPlaceholder); |
| 111 }; |
| 112 |
| 113 } // namespace plugins |
| 114 |
| 115 #endif // COMPONENTS_PLUGINS_RENDERER_PLUGIN_PLACEHOLDER_H_ |
OLD | NEW |