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

Side by Side Diff: chrome/renderer/render_view.cc

Issue 2262002: Add ppapi plugins to about:plugins (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: '' Created 10 years, 7 months 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2010 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/renderer/render_view.h" 5 #include "chrome/renderer/render_view.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <string> 8 #include <string>
9 #include <vector> 9 #include <vector>
10 10
(...skipping 14 matching lines...) Expand all
25 #include "build/build_config.h" 25 #include "build/build_config.h"
26 #include "chrome/common/appcache/appcache_dispatcher.h" 26 #include "chrome/common/appcache/appcache_dispatcher.h"
27 #include "chrome/common/bindings_policy.h" 27 #include "chrome/common/bindings_policy.h"
28 #include "chrome/common/child_process_logging.h" 28 #include "chrome/common/child_process_logging.h"
29 #include "chrome/common/chrome_constants.h" 29 #include "chrome/common/chrome_constants.h"
30 #include "chrome/common/chrome_paths.h" 30 #include "chrome/common/chrome_paths.h"
31 #include "chrome/common/chrome_switches.h" 31 #include "chrome/common/chrome_switches.h"
32 #include "chrome/common/extensions/extension_constants.h" 32 #include "chrome/common/extensions/extension_constants.h"
33 #include "chrome/common/jstemplate_builder.h" 33 #include "chrome/common/jstemplate_builder.h"
34 #include "chrome/common/page_zoom.h" 34 #include "chrome/common/page_zoom.h"
35 #include "chrome/common/pepper_plugin_registry.h"
35 #include "chrome/common/render_messages.h" 36 #include "chrome/common/render_messages.h"
36 #include "chrome/common/renderer_preferences.h" 37 #include "chrome/common/renderer_preferences.h"
37 #include "chrome/common/thumbnail_score.h" 38 #include "chrome/common/thumbnail_score.h"
38 #include "chrome/common/url_constants.h" 39 #include "chrome/common/url_constants.h"
39 #include "chrome/common/window_container_type.h" 40 #include "chrome/common/window_container_type.h"
40 #include "chrome/renderer/about_handler.h" 41 #include "chrome/renderer/about_handler.h"
41 #include "chrome/renderer/audio_message_filter.h" 42 #include "chrome/renderer/audio_message_filter.h"
42 #include "chrome/renderer/devtools_agent.h" 43 #include "chrome/renderer/devtools_agent.h"
43 #include "chrome/renderer/devtools_client.h" 44 #include "chrome/renderer/devtools_client.h"
44 #include "chrome/renderer/extension_groups.h" 45 #include "chrome/renderer/extension_groups.h"
45 #include "chrome/renderer/extensions/event_bindings.h" 46 #include "chrome/renderer/extensions/event_bindings.h"
46 #include "chrome/renderer/extensions/extension_process_bindings.h" 47 #include "chrome/renderer/extensions/extension_process_bindings.h"
47 #include "chrome/renderer/extensions/renderer_extension_bindings.h" 48 #include "chrome/renderer/extensions/renderer_extension_bindings.h"
48 #include "chrome/renderer/geolocation_dispatcher.h" 49 #include "chrome/renderer/geolocation_dispatcher.h"
49 #include "chrome/renderer/localized_error.h" 50 #include "chrome/renderer/localized_error.h"
50 #include "chrome/renderer/media/audio_renderer_impl.h" 51 #include "chrome/renderer/media/audio_renderer_impl.h"
51 #include "chrome/renderer/media/ipc_video_renderer.h" 52 #include "chrome/renderer/media/ipc_video_renderer.h"
52 #include "chrome/renderer/navigation_state.h" 53 #include "chrome/renderer/navigation_state.h"
53 #include "chrome/renderer/notification_provider.h" 54 #include "chrome/renderer/notification_provider.h"
54 #include "chrome/renderer/pepper_plugin_registry.h"
55 #include "chrome/renderer/plugin_channel_host.h" 55 #include "chrome/renderer/plugin_channel_host.h"
56 #include "chrome/renderer/print_web_view_helper.h" 56 #include "chrome/renderer/print_web_view_helper.h"
57 #include "chrome/renderer/render_process.h" 57 #include "chrome/renderer/render_process.h"
58 #include "chrome/renderer/render_thread.h" 58 #include "chrome/renderer/render_thread.h"
59 #include "chrome/renderer/renderer_webapplicationcachehost_impl.h" 59 #include "chrome/renderer/renderer_webapplicationcachehost_impl.h"
60 #include "chrome/renderer/renderer_webstoragenamespace_impl.h" 60 #include "chrome/renderer/renderer_webstoragenamespace_impl.h"
61 #include "chrome/renderer/spellchecker/spellcheck.h" 61 #include "chrome/renderer/spellchecker/spellcheck.h"
62 #include "chrome/renderer/user_script_slave.h" 62 #include "chrome/renderer/user_script_slave.h"
63 #include "chrome/renderer/visitedlink_slave.h" 63 #include "chrome/renderer/visitedlink_slave.h"
64 #include "chrome/renderer/webplugin_delegate_pepper.h" 64 #include "chrome/renderer/webplugin_delegate_pepper.h"
(...skipping 2023 matching lines...) Expand 10 before | Expand all | Expand 10 after
2088 if (RenderThread::current()) // Will be NULL during unit tests. 2088 if (RenderThread::current()) // Will be NULL during unit tests.
2089 RenderThread::current()->DoNotSuspendWebKitSharedTimer(); 2089 RenderThread::current()->DoNotSuspendWebKitSharedTimer();
2090 2090
2091 SendAndRunNestedMessageLoop(new ViewHostMsg_RunModal(routing_id_)); 2091 SendAndRunNestedMessageLoop(new ViewHostMsg_RunModal(routing_id_));
2092 } 2092 }
2093 2093
2094 // WebKit::WebFrameClient ----------------------------------------------------- 2094 // WebKit::WebFrameClient -----------------------------------------------------
2095 2095
2096 WebPlugin* RenderView::createPlugin( 2096 WebPlugin* RenderView::createPlugin(
2097 WebFrame* frame, const WebPluginParams& params) { 2097 WebFrame* frame, const WebPluginParams& params) {
2098 FilePath path;
2099 std::string actual_mime_type;
2100 render_thread_->Send(new ViewHostMsg_GetPluginPath(
2101 params.url, frame->top()->url(), params.mimeType.utf8(), &path,
2102 &actual_mime_type));
2103 if (path.value().empty())
2104 return NULL;
2105
2106 if (actual_mime_type.empty())
2107 actual_mime_type = params.mimeType.utf8();
2108
2098 scoped_refptr<pepper::PluginModule> pepper_module = 2109 scoped_refptr<pepper::PluginModule> pepper_module =
2099 PepperPluginRegistry::GetInstance()->GetModule(params.mimeType.utf8()); 2110 PepperPluginRegistry::GetInstance()->GetModule(path);
2100 if (pepper_module) { 2111 if (pepper_module) {
2101 return new pepper::WebPluginImpl(pepper_module, frame, params, 2112 return new pepper::WebPluginImpl(pepper_module, params,
2102 pepper_delegate_.AsWeakPtr()); 2113 pepper_delegate_.AsWeakPtr());
2103 } 2114 }
2104 return new webkit_glue::WebPluginImpl(frame, params, AsWeakPtr()); 2115
2116 return new webkit_glue::WebPluginImpl(frame, params, path, actual_mime_type,
2117 AsWeakPtr());
2105 } 2118 }
2106 2119
2107 WebWorker* RenderView::createWorker(WebFrame* frame, WebWorkerClient* client) { 2120 WebWorker* RenderView::createWorker(WebFrame* frame, WebWorkerClient* client) {
2108 WebApplicationCacheHostImpl* appcache_host = 2121 WebApplicationCacheHostImpl* appcache_host =
2109 WebApplicationCacheHostImpl::FromFrame(frame); 2122 WebApplicationCacheHostImpl::FromFrame(frame);
2110 int appcache_host_id = appcache_host ? appcache_host->host_id() : 0; 2123 int appcache_host_id = appcache_host ? appcache_host->host_id() : 0;
2111 return new WebWorkerProxy(client, RenderThread::current(), routing_id_, 2124 return new WebWorkerProxy(client, RenderThread::current(), routing_id_,
2112 appcache_host_id); 2125 appcache_host_id);
2113 } 2126 }
2114 2127
(...skipping 978 matching lines...) Expand 10 before | Expand all | Expand 10 after
3093 request_id, 3106 request_id,
3094 0, 3107 0,
3095 gfx::Rect(), 3108 gfx::Rect(),
3096 0, 3109 0,
3097 true)); 3110 true));
3098 } 3111 }
3099 3112
3100 // webkit_glue::WebPluginPageDelegate ----------------------------------------- 3113 // webkit_glue::WebPluginPageDelegate -----------------------------------------
3101 3114
3102 webkit_glue::WebPluginDelegate* RenderView::CreatePluginDelegate( 3115 webkit_glue::WebPluginDelegate* RenderView::CreatePluginDelegate(
3103 const GURL& url, 3116 const FilePath& file_path,
3104 const std::string& mime_type, 3117 const std::string& mime_type) {
3105 std::string* actual_mime_type) {
3106 if (!PluginChannelHost::IsListening()) 3118 if (!PluginChannelHost::IsListening())
3107 return NULL; 3119 return NULL;
3108 3120
3109 GURL policy_url;
3110 WebFrame* main_frame = webview()->mainFrame();
3111 if (main_frame)
3112 policy_url = main_frame->url();
3113
3114 FilePath path;
3115 render_thread_->Send(new ViewHostMsg_GetPluginPath(
3116 url, policy_url, mime_type, &path, actual_mime_type));
3117 if (path.value().empty())
3118 return NULL;
3119
3120 FilePath internal_pdf_path;
3121 PathService::Get(chrome::FILE_PDF_PLUGIN, &internal_pdf_path);
3122
3123 const std::string* mime_type_to_use;
3124 if (!actual_mime_type->empty())
3125 mime_type_to_use = actual_mime_type;
3126 else
3127 mime_type_to_use = &mime_type;
3128
3129 bool use_pepper_host = false; 3121 bool use_pepper_host = false;
3130 bool in_process_plugin = RenderProcess::current()->UseInProcessPlugins(); 3122 bool in_process_plugin = RenderProcess::current()->UseInProcessPlugins();
3131 // Check for trusted Pepper plugins. 3123 // Check for trusted Pepper plugins.
3132 const char kPepperPrefix[] = "pepper-"; 3124 const char kPepperPrefix[] = "pepper-";
3133 if (StartsWithASCII(*mime_type_to_use, kPepperPrefix, true)) { 3125 if (StartsWithASCII(mime_type, kPepperPrefix, true)) {
3134 if (CommandLine::ForCurrentProcess()-> 3126 if (CommandLine::ForCurrentProcess()->
3135 HasSwitch(switches::kInternalPepper)) { 3127 HasSwitch(switches::kInternalPepper)) {
3136 in_process_plugin = true; 3128 in_process_plugin = true;
3137 use_pepper_host = true; 3129 use_pepper_host = true;
3138 } else { 3130 } else {
3139 // In process Pepper plugins must be explicitly enabled. 3131 // In process Pepper plugins must be explicitly enabled.
3140 return NULL; 3132 return NULL;
3141 } 3133 }
3142 } else if (path == internal_pdf_path) { 3134 } else {
3143 in_process_plugin = true; 3135 FilePath internal_pdf_path;
3144 use_pepper_host = true; 3136 PathService::Get(chrome::FILE_PDF_PLUGIN, &internal_pdf_path);
3137 if (file_path == internal_pdf_path) {
3138 in_process_plugin = true;
3139 use_pepper_host = true;
3140 }
3145 } 3141 }
3142
3146 // Check for Native Client modules. 3143 // Check for Native Client modules.
3147 if (CommandLine::ForCurrentProcess()->HasSwitch(switches::kInternalNaCl)) { 3144 if (CommandLine::ForCurrentProcess()->HasSwitch(switches::kInternalNaCl)) {
3148 if (mime_type == "application/x-nacl-srpc") { 3145 if (mime_type == "application/x-nacl-srpc") {
3149 in_process_plugin = true; 3146 in_process_plugin = true;
3150 use_pepper_host = true; 3147 use_pepper_host = true;
3151 } 3148 }
3152 } 3149 }
3150
3153 if (in_process_plugin) { 3151 if (in_process_plugin) {
3154 if (use_pepper_host) { 3152 if (use_pepper_host) {
3155 WebPluginDelegatePepper* pepper_plugin = 3153 WebPluginDelegatePepper* pepper_plugin =
3156 WebPluginDelegatePepper::Create(path, *mime_type_to_use, 3154 WebPluginDelegatePepper::Create(file_path, mime_type, AsWeakPtr());
3157 AsWeakPtr());
3158 current_pepper_plugins_.insert(pepper_plugin); 3155 current_pepper_plugins_.insert(pepper_plugin);
3159 return pepper_plugin; 3156 return pepper_plugin;
3160 } else { 3157 } else {
3161 #if defined(OS_WIN) // In-proc plugins aren't supported on Linux or Mac. 3158 #if defined(OS_WIN) // In-proc plugins aren't supported on Linux or Mac.
3162 return WebPluginDelegateImpl::Create( 3159 return WebPluginDelegateImpl::Create(
3163 path, *mime_type_to_use, gfx::NativeViewFromId(host_window_)); 3160 file_path, mime_type, gfx::NativeViewFromId(host_window_));
3164 #else 3161 #else
3165 NOTIMPLEMENTED(); 3162 NOTIMPLEMENTED();
3166 return NULL; 3163 return NULL;
3167 #endif 3164 #endif
3168 } 3165 }
3169 } 3166 }
3170 3167
3171 return new WebPluginDelegateProxy(*mime_type_to_use, AsWeakPtr()); 3168 return new WebPluginDelegateProxy(mime_type, AsWeakPtr());
3172 } 3169 }
3173 3170
3174 void RenderView::CreatedPluginWindow(gfx::PluginWindowHandle window) { 3171 void RenderView::CreatedPluginWindow(gfx::PluginWindowHandle window) {
3175 #if defined(USE_X11) 3172 #if defined(USE_X11)
3176 RenderThread::current()->Send(new ViewHostMsg_CreatePluginContainer( 3173 RenderThread::current()->Send(new ViewHostMsg_CreatePluginContainer(
3177 routing_id(), window)); 3174 routing_id(), window));
3178 #endif 3175 #endif
3179 } 3176 }
3180 3177
3181 void RenderView::WillDestroyPluginWindow(gfx::PluginWindowHandle window) { 3178 void RenderView::WillDestroyPluginWindow(gfx::PluginWindowHandle window) {
(...skipping 1846 matching lines...) Expand 10 before | Expand all | Expand 10 after
5028 5025
5029 if (last_top_level_navigation_page_id_ != page_id_ && 5026 if (last_top_level_navigation_page_id_ != page_id_ &&
5030 // Not interested in reloads. 5027 // Not interested in reloads.
5031 type != WebKit::WebNavigationTypeReload && 5028 type != WebKit::WebNavigationTypeReload &&
5032 type != WebKit::WebNavigationTypeFormSubmitted) { 5029 type != WebKit::WebNavigationTypeFormSubmitted) {
5033 return true; 5030 return true;
5034 } 5031 }
5035 } 5032 }
5036 return false; 5033 return false;
5037 } 5034 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698