| Index: chrome/renderer/blocked_plugin.cc
|
| ===================================================================
|
| --- chrome/renderer/blocked_plugin.cc (revision 67601)
|
| +++ chrome/renderer/blocked_plugin.cc (working copy)
|
| @@ -14,20 +14,31 @@
|
| #include "chrome/renderer/render_view.h"
|
| #include "grit/generated_resources.h"
|
| #include "grit/renderer_resources.h"
|
| +#include "third_party/WebKit/WebKit/chromium/public/WebContextMenuData.h"
|
| #include "third_party/WebKit/WebKit/chromium/public/WebData.h"
|
| #include "third_party/WebKit/WebKit/chromium/public/WebFrame.h"
|
| +#include "third_party/WebKit/WebKit/chromium/public/WebMenuItemInfo.h"
|
| #include "third_party/WebKit/WebKit/chromium/public/WebPluginContainer.h"
|
| +#include "third_party/WebKit/WebKit/chromium/public/WebPoint.h"
|
| +#include "third_party/WebKit/WebKit/chromium/public/WebVector.h"
|
| #include "third_party/WebKit/WebKit/chromium/public/WebView.h"
|
| #include "webkit/glue/plugins/plugin_group.h"
|
| #include "webkit/glue/plugins/webview_plugin.h"
|
| #include "webkit/glue/webpreferences.h"
|
|
|
| +using WebKit::WebContextMenuData;
|
| using WebKit::WebFrame;
|
| +using WebKit::WebMenuItemInfo;
|
| using WebKit::WebPlugin;
|
| using WebKit::WebPluginContainer;
|
| using WebKit::WebPluginParams;
|
| +using WebKit::WebPoint;
|
| +using WebKit::WebString;
|
| +using WebKit::WebVector;
|
|
|
| static const char* const kBlockedPluginDataURL = "chrome://blockedplugindata/";
|
| +static const unsigned kMenuActionLoad = 1;
|
| +static const unsigned kMenuActionRemove = 2;
|
|
|
| BlockedPlugin::BlockedPlugin(RenderView* render_view,
|
| WebFrame* frame,
|
| @@ -47,7 +58,8 @@
|
|
|
| DictionaryValue values;
|
| values.SetString("message", message);
|
| - values.SetString("name", info.GetGroupName());
|
| + name_ = info.GetGroupName();
|
| + values.SetString("name", name_);
|
|
|
| // "t" is the id of the templates root node.
|
| std::string html_data = jstemplate_builder::GetTemplatesHtml(
|
| @@ -63,7 +75,9 @@
|
| NotificationService::AllSources());
|
| }
|
|
|
| -BlockedPlugin::~BlockedPlugin() {}
|
| +BlockedPlugin::~BlockedPlugin() {
|
| + render_view_->CustomMenuListenerDestroyed(this);
|
| +}
|
|
|
| void BlockedPlugin::BindWebFrame(WebFrame* frame) {
|
| BindToJavascript(frame, L"plugin");
|
| @@ -74,6 +88,48 @@
|
| delete this;
|
| }
|
|
|
| +void BlockedPlugin::ShowContextMenu(const WebKit::WebMouseEvent& event) {
|
| + WebContextMenuData menu_data;
|
| + WebVector<WebMenuItemInfo> custom_items(static_cast<size_t>(4));
|
| +
|
| + WebMenuItemInfo name_item;
|
| + name_item.label = name_;
|
| + custom_items[0] = name_item;
|
| +
|
| + WebMenuItemInfo separator_item;
|
| + separator_item.type = WebMenuItemInfo::Separator;
|
| + custom_items[1] = separator_item;
|
| +
|
| + WebMenuItemInfo run_item;
|
| + run_item.action = kMenuActionLoad;
|
| + run_item.enabled = true;
|
| + run_item.label = WebString::fromUTF8(
|
| + l10n_util::GetStringUTF8(IDS_CONTENT_CONTEXT_PLUGIN_RUN).c_str());
|
| + custom_items[2] = run_item;
|
| +
|
| + WebMenuItemInfo hide_item;
|
| + hide_item.action = kMenuActionRemove;
|
| + hide_item.enabled = true;
|
| + hide_item.label = WebString::fromUTF8(
|
| + l10n_util::GetStringUTF8(IDS_CONTENT_CONTEXT_PLUGIN_HIDE).c_str());
|
| + custom_items[3] = hide_item;
|
| +
|
| + menu_data.customItems.swap(custom_items);
|
| + menu_data.mousePosition = WebPoint(event.windowX, event.windowY);
|
| + render_view_->showContextMenu(NULL, menu_data);
|
| + render_view_->CustomMenuListenerInstall(this);
|
| +}
|
| +
|
| +void BlockedPlugin::MenuItemSelected(unsigned id) {
|
| + if (id == kMenuActionLoad) {
|
| + LoadPlugin();
|
| + } else if (id == kMenuActionRemove) {
|
| + HidePlugin();
|
| + } else {
|
| + NOTREACHED();
|
| + }
|
| +}
|
| +
|
| void BlockedPlugin::Observe(NotificationType type,
|
| const NotificationSource& source,
|
| const NotificationDetails& details) {
|
| @@ -102,3 +158,10 @@
|
| plugin_->destroy();
|
| }
|
| }
|
| +
|
| +void BlockedPlugin::HidePlugin() {
|
| + CHECK(plugin_);
|
| + WebPluginContainer* container = plugin_->container();
|
| + container->element().setAttribute("style", "display: none;");
|
| +}
|
| +
|
|
|