| Index: components/plugins/renderer/plugin_placeholder.h
|
| diff --git a/components/plugins/renderer/plugin_placeholder.h b/components/plugins/renderer/plugin_placeholder.h
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..83a13e66054b8ce5b002fe65b5351a9413ecbb18
|
| --- /dev/null
|
| +++ b/components/plugins/renderer/plugin_placeholder.h
|
| @@ -0,0 +1,115 @@
|
| +// Copyright 2013 The Chromium Authors. All rights reserved.
|
| +// Use of this source code is governed by a BSD-style license that can be
|
| +// found in the LICENSE file.
|
| +
|
| +#ifndef COMPONENTS_PLUGINS_RENDERER_PLUGIN_PLACEHOLDER_H_
|
| +#define COMPONENTS_PLUGINS_RENDERER_PLUGIN_PLACEHOLDER_H_
|
| +
|
| +#include "components/plugins/renderer/webview_plugin.h"
|
| +#include "content/public/common/webplugininfo.h"
|
| +#include "content/public/renderer/context_menu_client.h"
|
| +#include "content/public/renderer/render_process_observer.h"
|
| +#include "content/public/renderer/render_view_observer.h"
|
| +#include "third_party/WebKit/public/web/WebPluginParams.h"
|
| +#include "webkit/renderer/cpp_bound_class.h"
|
| +
|
| +namespace content {
|
| +struct WebPluginInfo;
|
| +}
|
| +
|
| +namespace plugins {
|
| +// Placeholders can be used if a plug-in is missing or not available
|
| +// (blocked or disabled).
|
| +class PluginPlaceholder : public content::RenderViewObserver,
|
| + public webkit_glue::CppBoundClass,
|
| + public WebViewPlugin::Delegate {
|
| + public:
|
| +
|
| + WebViewPlugin* plugin() { return plugin_; }
|
| +
|
| + void set_blocked_for_prerendering(bool blocked_for_prerendering) {
|
| + is_blocked_for_prerendering_ = blocked_for_prerendering;
|
| + }
|
| +
|
| + void set_allow_loading(bool allow_loading) { allow_loading_ = allow_loading; }
|
| +
|
| + protected:
|
| + // |render_view| and |frame| are weak pointers. If either one is going away,
|
| + // our |plugin_| will be destroyed as well and will notify us.
|
| + PluginPlaceholder(content::RenderView* render_view,
|
| + WebKit::WebFrame* frame,
|
| + const WebKit::WebPluginParams& params,
|
| + const std::string& html_data,
|
| + GURL placeholderDataUrl);
|
| +
|
| + virtual ~PluginPlaceholder();
|
| +
|
| + void OnLoadBlockedPlugins(const std::string& identifier);
|
| + void OnSetIsPrerendering(bool is_prerendering);
|
| +
|
| + void SetMessage(const string16& message);
|
| + void SetPluginInfo(const content::WebPluginInfo& plugin_info);
|
| + const content::WebPluginInfo& GetPluginInfo() const;
|
| + void SetIdentifier(const std::string& identifier);
|
| + WebKit::WebFrame* GetFrame();
|
| + const WebKit::WebPluginParams& GetPluginParams() const;
|
| + bool LoadingAllowed() const { return allow_loading_; }
|
| +
|
| + // Replace this placeholder with a different plugin (which could be
|
| + // a placeholder again).
|
| + void ReplacePlugin(WebKit::WebPlugin* new_plugin);
|
| +
|
| + // Hide this placeholder.
|
| + void HidePlugin();
|
| +
|
| + // Load the blocked plugin.
|
| + void LoadPlugin();
|
| +
|
| + // WebViewPlugin::Delegate method:
|
| + virtual void BindWebFrame(WebKit::WebFrame* frame) OVERRIDE;
|
| +
|
| + private:
|
| + // WebViewPlugin::Delegate methods:
|
| + virtual void WillDestroyPlugin() OVERRIDE;
|
| + virtual void ShowContextMenu(const WebKit::WebMouseEvent&) OVERRIDE;
|
| +
|
| + // Javascript callbacks:
|
| + // All ignore arguments (which are, however, required by caller) and return
|
| + // nothing.
|
| +
|
| + // Load the blocked plugin by calling LoadPlugin().
|
| + void LoadCallback(const webkit_glue::CppArgumentList& args,
|
| + webkit_glue::CppVariant* result);
|
| +
|
| + // Hide the blocked plugin by calling HidePlugin().
|
| + void HideCallback(const webkit_glue::CppArgumentList& args,
|
| + webkit_glue::CppVariant* result);
|
| +
|
| + void DidFinishLoadingCallback(const webkit_glue::CppArgumentList& args,
|
| + webkit_glue::CppVariant* result);
|
| +
|
| + void UpdateMessage();
|
| +
|
| + WebKit::WebFrame* frame_;
|
| + WebKit::WebPluginParams plugin_params_;
|
| + WebViewPlugin* plugin_;
|
| +
|
| + content::WebPluginInfo plugin_info_;
|
| +
|
| + string16 message_;
|
| +
|
| + // True iff the plugin was blocked because the page was being prerendered.
|
| + // Plugin will automatically be loaded when the page is displayed.
|
| + bool is_blocked_for_prerendering_;
|
| + bool allow_loading_;
|
| +
|
| + bool hidden_;
|
| + bool finished_loading_;
|
| + std::string identifier_;
|
| +
|
| + DISALLOW_COPY_AND_ASSIGN(PluginPlaceholder);
|
| +};
|
| +
|
| +} // namespace plugins
|
| +
|
| +#endif // COMPONENTS_PLUGINS_RENDERER_PLUGIN_PLACEHOLDER_H_
|
|
|