Index: chrome/renderer/blocked_plugin.cc |
=================================================================== |
--- chrome/renderer/blocked_plugin.cc (revision 71581) |
+++ chrome/renderer/blocked_plugin.cc (working copy) |
@@ -9,6 +9,7 @@ |
#include "base/string_piece.h" |
#include "base/values.h" |
#include "chrome/common/jstemplate_builder.h" |
+#include "chrome/common/render_messages.h" |
#include "chrome/renderer/render_view.h" |
#include "grit/generated_resources.h" |
#include "third_party/WebKit/WebKit/chromium/public/WebContextMenuData.h" |
@@ -49,9 +50,10 @@ |
const WebPreferences& preferences, |
int template_id, |
const string16& message) |
- : render_view_(render_view), |
+ : RenderViewObserver(render_view), |
frame_(frame), |
- plugin_params_(params) { |
+ plugin_params_(params), |
+ custom_menu_showing_(false) { |
const base::StringPiece template_html( |
ResourceBundle::GetSharedInstance().GetRawDataResource(template_id)); |
@@ -71,13 +73,9 @@ |
preferences, |
html_data, |
GURL(kBlockedPluginDataURL)); |
- |
- render_view_->RegisterBlockedPlugin(this); |
} |
BlockedPlugin::~BlockedPlugin() { |
- render_view_->CustomMenuListenerDestroyed(this); |
- render_view_->UnregisterBlockedPlugin(this); |
} |
void BlockedPlugin::BindWebFrame(WebFrame* frame) { |
@@ -118,11 +116,29 @@ |
menu_data.customItems.swap(custom_items); |
menu_data.mousePosition = WebPoint(event.windowX, event.windowY); |
- render_view_->showContextMenu(NULL, menu_data); |
- render_view_->CustomMenuListenerInstall(this); |
+ render_view()->showContextMenu(NULL, menu_data); |
+ custom_menu_showing_ = true; |
} |
-void BlockedPlugin::MenuItemSelected(unsigned id) { |
+bool BlockedPlugin::OnMessageReceived(const IPC::Message& message) { |
+ if (custom_menu_showing_ && |
+ message.type() == ViewMsg_CustomContextMenuAction::ID) { |
+ ViewMsg_CustomContextMenuAction::Dispatch( |
+ &message, this, this, &BlockedPlugin::OnMenuItemSelected); |
+ return true; |
+ } |
+ |
+ // Don't want to swallow these messages. |
+ if (message.type() == ViewMsg_LoadBlockedPlugins::ID) { |
+ LoadPlugin(); |
+ } else if (message.type() == ViewMsg_ContextMenuClosed::ID) { |
+ custom_menu_showing_ = false; |
+ } |
+ |
+ return false; |
+} |
+ |
+void BlockedPlugin::OnMenuItemSelected(unsigned id) { |
if (id == kMenuActionLoad) { |
LoadPlugin(); |
} else if (id == kMenuActionRemove) { |
@@ -136,8 +152,7 @@ |
CHECK(plugin_); |
WebPluginContainer* container = plugin_->container(); |
WebPlugin* new_plugin = |
- render_view_->CreatePluginNoCheck(frame_, |
- plugin_params_); |
+ render_view()->CreatePluginNoCheck(frame_, plugin_params_); |
if (new_plugin && new_plugin->initialize(container)) { |
container->setPlugin(new_plugin); |
container->invalidate(); |