Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(7287)

Unified Diff: chrome/renderer/plugins/missing_plugin.cc

Issue 8461011: Clean up plug-in placeholders: (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: cleanup Created 9 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/renderer/plugins/missing_plugin.cc
diff --git a/chrome/renderer/plugins/missing_plugin.cc b/chrome/renderer/plugins/missing_plugin.cc
new file mode 100644
index 0000000000000000000000000000000000000000..e31618f662d70f2a4e33aa7f07371fa41d872afd
--- /dev/null
+++ b/chrome/renderer/plugins/missing_plugin.cc
@@ -0,0 +1,123 @@
+// Copyright (c) 2011 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.
+
+#include "chrome/renderer/plugins/missing_plugin.h"
+
+#include "base/string_piece.h"
+#include "base/string_util.h"
+#include "base/values.h"
+#include "chrome/common/jstemplate_builder.h"
+#include "chrome/renderer/custom_menu_commands.h"
+#include "content/public/renderer/render_thread.h"
+#include "content/public/renderer/render_view.h"
+#include "grit/generated_resources.h"
+#include "grit/renderer_resources.h"
+#include "third_party/WebKit/Source/WebKit/chromium/public/WebContextMenuData.h"
+#include "third_party/WebKit/Source/WebKit/chromium/public/WebInputEvent.h"
+#include "third_party/WebKit/Source/WebKit/chromium/public/WebMenuItemInfo.h"
+#include "third_party/WebKit/Source/WebKit/chromium/public/WebPoint.h"
+#include "third_party/WebKit/Source/WebKit/chromium/public/WebVector.h"
+#include "ui/base/l10n/l10n_util.h"
+#include "ui/base/resource/resource_bundle.h"
+#include "webkit/plugins/npapi/plugin_group.h"
+
+using WebKit::WebContextMenuData;
+using WebKit::WebFrame;
+using WebKit::WebMenuItemInfo;
+using WebKit::WebPlugin;
+using WebKit::WebPluginParams;
+using WebKit::WebPoint;
+using WebKit::WebString;
+using WebKit::WebVector;
+using content::RenderThread;
+
+namespace {
+const MissingPlugin* g_last_active_menu = NULL;
+}
+
+// static
+webkit::npapi::WebViewPlugin* MissingPlugin::Create(
+ content::RenderView* render_view,
+ WebFrame* frame,
+ const WebPluginParams& params) {
+ const base::StringPiece template_html(
+ ResourceBundle::GetSharedInstance().GetRawDataResource(
+ IDR_BLOCKED_PLUGIN_HTML));
+
+ DictionaryValue values;
+ values.SetString("message", l10n_util::GetStringUTF8(IDS_PLUGIN_NOT_FOUND));
+
+ // "t" is the id of the templates root node.
+ std::string html_data =
+ jstemplate_builder::GetI18nTemplateHtml(template_html, &values);
+
+ MissingPlugin* missing_plugin = new MissingPlugin(render_view, frame, params,
+ html_data);
+ return missing_plugin->plugin();
+}
+
+MissingPlugin::MissingPlugin(content::RenderView* render_view,
+ WebFrame* frame,
+ const WebPluginParams& params,
+ const std::string& html_data)
+ : PluginPlaceholder(render_view, frame, params, html_data),
+ mime_type_(params.mimeType) {
+}
+
+MissingPlugin::~MissingPlugin() {
+}
+
+void MissingPlugin::BindWebFrame(WebFrame* frame) {
+ PluginPlaceholder::BindWebFrame(frame);
+ BindMethod("hide", &MissingPlugin::HideCallback);
+}
+
+void MissingPlugin::HideCallback(const CppArgumentList& args,
+ CppVariant* result) {
+ RenderThread::Get()->RecordUserMetrics("MissingPlugin_Hide_Click");
+ HidePlugin();
+}
+
+void MissingPlugin::ShowContextMenu(const WebKit::WebMouseEvent& event) {
+ WebContextMenuData menu_data;
+
+ WebVector<WebMenuItemInfo> custom_items(static_cast<size_t>(3));
+
+ size_t i = 0;
+ WebMenuItemInfo mime_type_item;
+ mime_type_item.label = mime_type_;
+ mime_type_item.hasTextDirectionOverride = false;
+ mime_type_item.textDirection = WebKit::WebTextDirectionDefault;
+ custom_items[i++] = mime_type_item;
+
+ WebMenuItemInfo separator_item;
+ separator_item.type = WebMenuItemInfo::Separator;
+ custom_items[i++] = separator_item;
+
+ WebMenuItemInfo hide_item;
+ hide_item.action = chrome::MENU_COMMAND_PLUGIN_HIDE;
+ hide_item.enabled = true;
+ hide_item.label = WebString::fromUTF8(
+ l10n_util::GetStringUTF8(IDS_CONTENT_CONTEXT_PLUGIN_HIDE).c_str());
+ hide_item.hasTextDirectionOverride = false;
+ hide_item.textDirection = WebKit::WebTextDirectionDefault;
+ custom_items[i++] = hide_item;
+
+ menu_data.customItems.swap(custom_items);
+ menu_data.mousePosition = WebPoint(event.windowX, event.windowY);
+ render_view()->ShowContextMenu(NULL, menu_data);
+ g_last_active_menu = this;
+}
+
+void MissingPlugin::ContextMenuAction(unsigned id) {
+ if (g_last_active_menu != this)
+ return;
+ if (id == chrome::MENU_COMMAND_PLUGIN_HIDE) {
+ RenderThread::Get()->RecordUserMetrics("MissingPlugin_Hide_Menu");
+ HidePlugin();
+ } else {
+ NOTREACHED();
+ }
+}
+

Powered by Google App Engine
This is Rietveld 408576698