| Index: chrome/renderer/render_view.cc
|
| ===================================================================
|
| --- chrome/renderer/render_view.cc (revision 48402)
|
| +++ chrome/renderer/render_view.cc (working copy)
|
| @@ -32,6 +32,7 @@
|
| #include "chrome/common/extensions/extension_constants.h"
|
| #include "chrome/common/jstemplate_builder.h"
|
| #include "chrome/common/page_zoom.h"
|
| +#include "chrome/common/pepper_plugin_registry.h"
|
| #include "chrome/common/render_messages.h"
|
| #include "chrome/common/renderer_preferences.h"
|
| #include "chrome/common/thumbnail_score.h"
|
| @@ -51,7 +52,6 @@
|
| #include "chrome/renderer/media/ipc_video_renderer.h"
|
| #include "chrome/renderer/navigation_state.h"
|
| #include "chrome/renderer/notification_provider.h"
|
| -#include "chrome/renderer/pepper_plugin_registry.h"
|
| #include "chrome/renderer/plugin_channel_host.h"
|
| #include "chrome/renderer/print_web_view_helper.h"
|
| #include "chrome/renderer/render_process.h"
|
| @@ -2095,13 +2095,26 @@
|
|
|
| WebPlugin* RenderView::createPlugin(
|
| WebFrame* frame, const WebPluginParams& params) {
|
| + FilePath path;
|
| + std::string actual_mime_type;
|
| + render_thread_->Send(new ViewHostMsg_GetPluginPath(
|
| + params.url, frame->top()->url(), params.mimeType.utf8(), &path,
|
| + &actual_mime_type));
|
| + if (path.value().empty())
|
| + return NULL;
|
| +
|
| + if (actual_mime_type.empty())
|
| + actual_mime_type = params.mimeType.utf8();
|
| +
|
| scoped_refptr<pepper::PluginModule> pepper_module =
|
| - PepperPluginRegistry::GetInstance()->GetModule(params.mimeType.utf8());
|
| + PepperPluginRegistry::GetInstance()->GetModule(path);
|
| if (pepper_module) {
|
| - return new pepper::WebPluginImpl(pepper_module, frame, params,
|
| + return new pepper::WebPluginImpl(pepper_module, params,
|
| pepper_delegate_.AsWeakPtr());
|
| }
|
| - return new webkit_glue::WebPluginImpl(frame, params, AsWeakPtr());
|
| +
|
| + return new webkit_glue::WebPluginImpl(frame, params, path, actual_mime_type,
|
| + AsWeakPtr());
|
| }
|
|
|
| WebWorker* RenderView::createWorker(WebFrame* frame, WebWorkerClient* client) {
|
| @@ -3100,37 +3113,16 @@
|
| // webkit_glue::WebPluginPageDelegate -----------------------------------------
|
|
|
| webkit_glue::WebPluginDelegate* RenderView::CreatePluginDelegate(
|
| - const GURL& url,
|
| - const std::string& mime_type,
|
| - std::string* actual_mime_type) {
|
| + const FilePath& file_path,
|
| + const std::string& mime_type) {
|
| if (!PluginChannelHost::IsListening())
|
| return NULL;
|
|
|
| - GURL policy_url;
|
| - WebFrame* main_frame = webview()->mainFrame();
|
| - if (main_frame)
|
| - policy_url = main_frame->url();
|
| -
|
| - FilePath path;
|
| - render_thread_->Send(new ViewHostMsg_GetPluginPath(
|
| - url, policy_url, mime_type, &path, actual_mime_type));
|
| - if (path.value().empty())
|
| - return NULL;
|
| -
|
| - FilePath internal_pdf_path;
|
| - PathService::Get(chrome::FILE_PDF_PLUGIN, &internal_pdf_path);
|
| -
|
| - const std::string* mime_type_to_use;
|
| - if (!actual_mime_type->empty())
|
| - mime_type_to_use = actual_mime_type;
|
| - else
|
| - mime_type_to_use = &mime_type;
|
| -
|
| bool use_pepper_host = false;
|
| bool in_process_plugin = RenderProcess::current()->UseInProcessPlugins();
|
| // Check for trusted Pepper plugins.
|
| const char kPepperPrefix[] = "pepper-";
|
| - if (StartsWithASCII(*mime_type_to_use, kPepperPrefix, true)) {
|
| + if (StartsWithASCII(mime_type, kPepperPrefix, true)) {
|
| if (CommandLine::ForCurrentProcess()->
|
| HasSwitch(switches::kInternalPepper)) {
|
| in_process_plugin = true;
|
| @@ -3139,10 +3131,15 @@
|
| // In process Pepper plugins must be explicitly enabled.
|
| return NULL;
|
| }
|
| - } else if (path == internal_pdf_path) {
|
| - in_process_plugin = true;
|
| - use_pepper_host = true;
|
| + } else {
|
| + FilePath internal_pdf_path;
|
| + PathService::Get(chrome::FILE_PDF_PLUGIN, &internal_pdf_path);
|
| + if (file_path == internal_pdf_path) {
|
| + in_process_plugin = true;
|
| + use_pepper_host = true;
|
| + }
|
| }
|
| +
|
| // Check for Native Client modules.
|
| if (CommandLine::ForCurrentProcess()->HasSwitch(switches::kInternalNaCl)) {
|
| if (mime_type == "application/x-nacl-srpc") {
|
| @@ -3150,17 +3147,17 @@
|
| use_pepper_host = true;
|
| }
|
| }
|
| +
|
| if (in_process_plugin) {
|
| if (use_pepper_host) {
|
| WebPluginDelegatePepper* pepper_plugin =
|
| - WebPluginDelegatePepper::Create(path, *mime_type_to_use,
|
| - AsWeakPtr());
|
| + WebPluginDelegatePepper::Create(file_path, mime_type, AsWeakPtr());
|
| current_pepper_plugins_.insert(pepper_plugin);
|
| return pepper_plugin;
|
| } else {
|
| #if defined(OS_WIN) // In-proc plugins aren't supported on Linux or Mac.
|
| return WebPluginDelegateImpl::Create(
|
| - path, *mime_type_to_use, gfx::NativeViewFromId(host_window_));
|
| + file_path, mime_type, gfx::NativeViewFromId(host_window_));
|
| #else
|
| NOTIMPLEMENTED();
|
| return NULL;
|
| @@ -3168,7 +3165,7 @@
|
| }
|
| }
|
|
|
| - return new WebPluginDelegateProxy(*mime_type_to_use, AsWeakPtr());
|
| + return new WebPluginDelegateProxy(mime_type, AsWeakPtr());
|
| }
|
|
|
| void RenderView::CreatedPluginWindow(gfx::PluginWindowHandle window) {
|
|
|