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

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

Issue 2967007: Disable outdated plugins, block non-sandboxed plugins. (Closed)
Patch Set: '' Created 10 years, 4 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
« no previous file with comments | « chrome/renderer/render_view.h ('k') | chrome/renderer/resources/blocked_plugin.html » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 13 matching lines...) Expand all
24 #include "base/time.h" 24 #include "base/time.h"
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.h" 32 #include "chrome/common/extensions/extension.h"
33 #include "chrome/common/jstemplate_builder.h" 33 #include "chrome/common/jstemplate_builder.h"
34 #include "chrome/common/notification_service.h"
34 #include "chrome/common/page_zoom.h" 35 #include "chrome/common/page_zoom.h"
35 #include "chrome/common/pepper_plugin_registry.h" 36 #include "chrome/common/pepper_plugin_registry.h"
37 #include "chrome/common/plugin_group.h"
36 #include "chrome/common/render_messages.h" 38 #include "chrome/common/render_messages.h"
37 #include "chrome/common/renderer_preferences.h" 39 #include "chrome/common/renderer_preferences.h"
38 #include "chrome/common/thumbnail_score.h" 40 #include "chrome/common/thumbnail_score.h"
39 #include "chrome/common/url_constants.h" 41 #include "chrome/common/url_constants.h"
40 #include "chrome/common/window_container_type.h" 42 #include "chrome/common/window_container_type.h"
41 #include "chrome/renderer/about_handler.h" 43 #include "chrome/renderer/about_handler.h"
42 #include "chrome/renderer/audio_message_filter.h" 44 #include "chrome/renderer/audio_message_filter.h"
43 #include "chrome/renderer/blocked_plugin.h" 45 #include "chrome/renderer/blocked_plugin.h"
44 #include "chrome/renderer/devtools_agent.h" 46 #include "chrome/renderer/devtools_agent.h"
45 #include "chrome/renderer/devtools_client.h" 47 #include "chrome/renderer/devtools_client.h"
(...skipping 630 matching lines...) Expand 10 before | Expand all | Expand 10 after
676 IPC_MESSAGE_HANDLER(ViewMsg_SetDOMUIProperty, OnSetDOMUIProperty) 678 IPC_MESSAGE_HANDLER(ViewMsg_SetDOMUIProperty, OnSetDOMUIProperty)
677 IPC_MESSAGE_HANDLER(ViewMsg_DragSourceEndedOrMoved, 679 IPC_MESSAGE_HANDLER(ViewMsg_DragSourceEndedOrMoved,
678 OnDragSourceEndedOrMoved) 680 OnDragSourceEndedOrMoved)
679 IPC_MESSAGE_HANDLER(ViewMsg_DragSourceSystemDragEnded, 681 IPC_MESSAGE_HANDLER(ViewMsg_DragSourceSystemDragEnded,
680 OnDragSourceSystemDragEnded) 682 OnDragSourceSystemDragEnded)
681 IPC_MESSAGE_HANDLER(ViewMsg_SetInitialFocus, OnSetInitialFocus) 683 IPC_MESSAGE_HANDLER(ViewMsg_SetInitialFocus, OnSetInitialFocus)
682 IPC_MESSAGE_HANDLER(ViewMsg_UpdateTargetURL_ACK, OnUpdateTargetURLAck) 684 IPC_MESSAGE_HANDLER(ViewMsg_UpdateTargetURL_ACK, OnUpdateTargetURLAck)
683 IPC_MESSAGE_HANDLER(ViewMsg_UpdateWebPreferences, OnUpdateWebPreferences) 685 IPC_MESSAGE_HANDLER(ViewMsg_UpdateWebPreferences, OnUpdateWebPreferences)
684 IPC_MESSAGE_HANDLER(ViewMsg_SetAltErrorPageURL, OnSetAltErrorPageURL) 686 IPC_MESSAGE_HANDLER(ViewMsg_SetAltErrorPageURL, OnSetAltErrorPageURL)
685 IPC_MESSAGE_HANDLER(ViewMsg_InstallMissingPlugin, OnInstallMissingPlugin) 687 IPC_MESSAGE_HANDLER(ViewMsg_InstallMissingPlugin, OnInstallMissingPlugin)
688 IPC_MESSAGE_HANDLER(ViewMsg_LoadBlockedPlugins, OnLoadBlockedPlugins)
686 IPC_MESSAGE_HANDLER(ViewMsg_RunFileChooserResponse, OnFileChooserResponse) 689 IPC_MESSAGE_HANDLER(ViewMsg_RunFileChooserResponse, OnFileChooserResponse)
687 IPC_MESSAGE_HANDLER(ViewMsg_EnableViewSourceMode, OnEnableViewSourceMode) 690 IPC_MESSAGE_HANDLER(ViewMsg_EnableViewSourceMode, OnEnableViewSourceMode)
688 IPC_MESSAGE_HANDLER(ViewMsg_GetAllSavableResourceLinksForCurrentPage, 691 IPC_MESSAGE_HANDLER(ViewMsg_GetAllSavableResourceLinksForCurrentPage,
689 OnGetAllSavableResourceLinksForCurrentPage) 692 OnGetAllSavableResourceLinksForCurrentPage)
690 IPC_MESSAGE_HANDLER( 693 IPC_MESSAGE_HANDLER(
691 ViewMsg_GetSerializedHtmlDataForCurrentPageWithLocalLinks, 694 ViewMsg_GetSerializedHtmlDataForCurrentPageWithLocalLinks,
692 OnGetSerializedHtmlDataForCurrentPageWithLocalLinks) 695 OnGetSerializedHtmlDataForCurrentPageWithLocalLinks)
693 IPC_MESSAGE_HANDLER(ViewMsg_GetApplicationInfo, OnGetApplicationInfo) 696 IPC_MESSAGE_HANDLER(ViewMsg_GetApplicationInfo, OnGetApplicationInfo)
694 IPC_MESSAGE_HANDLER(ViewMsg_ShouldClose, OnShouldClose) 697 IPC_MESSAGE_HANDLER(ViewMsg_ShouldClose, OnShouldClose)
695 IPC_MESSAGE_HANDLER(ViewMsg_ClosePage, OnClosePage) 698 IPC_MESSAGE_HANDLER(ViewMsg_ClosePage, OnClosePage)
(...skipping 1594 matching lines...) Expand 10 before | Expand all | Expand 10 after
2290 if (RenderThread::current()) // Will be NULL during unit tests. 2293 if (RenderThread::current()) // Will be NULL during unit tests.
2291 RenderThread::current()->DoNotSuspendWebKitSharedTimer(); 2294 RenderThread::current()->DoNotSuspendWebKitSharedTimer();
2292 2295
2293 SendAndRunNestedMessageLoop(new ViewHostMsg_RunModal(routing_id_)); 2296 SendAndRunNestedMessageLoop(new ViewHostMsg_RunModal(routing_id_));
2294 } 2297 }
2295 2298
2296 // WebKit::WebFrameClient ----------------------------------------------------- 2299 // WebKit::WebFrameClient -----------------------------------------------------
2297 2300
2298 WebPlugin* RenderView::createPlugin(WebFrame* frame, 2301 WebPlugin* RenderView::createPlugin(WebFrame* frame,
2299 const WebPluginParams& params) { 2302 const WebPluginParams& params) {
2300 if (AllowContentType(CONTENT_SETTINGS_TYPE_PLUGINS)) 2303 bool found = false;
2301 return CreatePluginInternal(frame, params); 2304 WebPluginInfo info;
2305 GURL url(params.url);
2306 std::string mime_type(params.mimeType.utf8());
2307 std::string actual_mime_type;
2308 Send(new ViewHostMsg_GetPluginInfo(url,
2309 frame->top()->url(),
2310 mime_type,
2311 &found,
2312 &info,
2313 &actual_mime_type));
2302 2314
2303 didNotAllowPlugins(frame); 2315 if (!found)
2304 return CreatePluginPlaceholder(frame, params); 2316 return NULL;
2317
2318 scoped_ptr<PluginGroup> group(PluginGroup::FindHardcodedPluginGroup(info));
2319 group->AddPlugin(info, 0);
2320
2321 if (!info.enabled) {
2322 if (group->IsVulnerable() && CommandLine::ForCurrentProcess()->HasSwitch(
2323 switches::kDisableOutdatedPlugins)) {
2324 Send(new ViewHostMsg_DisabledOutdatedPlugin(routing_id_,
2325 group->GetGroupName(),
2326 GURL(group->GetUpdateURL())));
2327 return CreatePluginPlaceholder(frame, params, group.get());
2328 }
2329 return NULL;
2330 }
2331
2332 if (info.path.value() != kDefaultPluginLibraryName) {
2333 if (!AllowContentType(CONTENT_SETTINGS_TYPE_PLUGINS)) {
2334 didNotAllowPlugins(frame);
2335 return CreatePluginPlaceholder(frame, params, NULL);
2336 }
2337 scoped_refptr<pepper::PluginModule> pepper_module =
2338 PepperPluginRegistry::GetInstance()->GetModule(info.path);
2339 if (pepper_module) {
2340 return CreatePepperPlugin(pepper_module.get(), params);
2341 }
2342 if (CommandLine::ForCurrentProcess()->HasSwitch(
2343 switches::kBlockNonSandboxedPlugins)) {
2344 Send(new ViewHostMsg_NonSandboxedPluginBlocked(routing_id_,
2345 group->GetGroupName()));
2346 return CreatePluginPlaceholder(frame, params, NULL);
2347 }
2348 }
2349 return CreateNPAPIPlugin(frame, params, &info, actual_mime_type);
2305 } 2350 }
2306 2351
2307 WebWorker* RenderView::createWorker(WebFrame* frame, WebWorkerClient* client) { 2352 WebWorker* RenderView::createWorker(WebFrame* frame, WebWorkerClient* client) {
2308 WebApplicationCacheHostImpl* appcache_host = 2353 WebApplicationCacheHostImpl* appcache_host =
2309 WebApplicationCacheHostImpl::FromFrame(frame); 2354 WebApplicationCacheHostImpl::FromFrame(frame);
2310 int appcache_host_id = appcache_host ? appcache_host->host_id() : 0; 2355 int appcache_host_id = appcache_host ? appcache_host->host_id() : 0;
2311 return new WebWorkerProxy(client, RenderThread::current(), routing_id_, 2356 return new WebWorkerProxy(client, RenderThread::current(), routing_id_,
2312 appcache_host_id); 2357 appcache_host_id);
2313 } 2358 }
2314 2359
(...skipping 1405 matching lines...) Expand 10 before | Expand all | Expand 10 after
3720 content_blocked_[settings_type] = true; 3765 content_blocked_[settings_type] = true;
3721 Send(new ViewHostMsg_ContentBlocked(routing_id_, settings_type)); 3766 Send(new ViewHostMsg_ContentBlocked(routing_id_, settings_type));
3722 } 3767 }
3723 } 3768 }
3724 3769
3725 void RenderView::ClearBlockedContentSettings() { 3770 void RenderView::ClearBlockedContentSettings() {
3726 for (size_t i = 0; i < arraysize(content_blocked_); ++i) 3771 for (size_t i = 0; i < arraysize(content_blocked_); ++i)
3727 content_blocked_[i] = false; 3772 content_blocked_[i] = false;
3728 } 3773 }
3729 3774
3730 WebPlugin* RenderView::CreatePluginInternal(WebFrame* frame, 3775 WebPlugin* RenderView::CreatePepperPlugin(pepper::PluginModule* pepper_module,
3731 const WebPluginParams& params) { 3776 const WebPluginParams& params) {
3732 FilePath path; 3777 return new pepper::WebPluginImpl(pepper_module, params,
3733 std::string actual_mime_type; 3778 pepper_delegate_.AsWeakPtr());
3734 render_thread_->Send(new ViewHostMsg_GetPluginPath( 3779 }
3735 params.url, frame->top()->url(), params.mimeType.utf8(), &path, 3780
3736 &actual_mime_type)); 3781
3737 if (path.value().empty()) 3782 WebPlugin* RenderView::CreateNPAPIPlugin(WebFrame* frame,
3783 const WebPluginParams& params,
3784 WebPluginInfo* plugin_info,
3785 const std::string& mime_type) {
3786 std::string actual_mime_type(mime_type);
3787 WebPluginInfo plugin;
3788 if (plugin_info != NULL) {
3789 plugin = *plugin_info;
3790 } else {
3791 bool found;
3792 std::string actual_mime_type(mime_type);
3793 Send(new ViewHostMsg_GetPluginInfo(
3794 params.url, frame->top()->url(), params.mimeType.utf8(), &found,
3795 &plugin, &actual_mime_type));
3796 if (!found)
3797 plugin.enabled = false;
3798 }
3799 if (!plugin.enabled)
3738 return NULL; 3800 return NULL;
3739 3801
3740 if (actual_mime_type.empty()) 3802 if (actual_mime_type.empty())
3741 actual_mime_type = params.mimeType.utf8(); 3803 actual_mime_type = params.mimeType.utf8();
3742 3804 return new webkit_glue::WebPluginImpl(frame, params, plugin.path,
3743 scoped_refptr<pepper::PluginModule> pepper_module = 3805 actual_mime_type, AsWeakPtr());
3744 PepperPluginRegistry::GetInstance()->GetModule(path);
3745 if (pepper_module) {
3746 return new pepper::WebPluginImpl(pepper_module, params,
3747 pepper_delegate_.AsWeakPtr());
3748 }
3749
3750 return new webkit_glue::WebPluginImpl(frame, params, path, actual_mime_type,
3751 AsWeakPtr());
3752 } 3806 }
3753 3807
3754 WebPlugin* RenderView::CreatePluginPlaceholder(WebFrame* frame, 3808 WebPlugin* RenderView::CreatePluginPlaceholder(WebFrame* frame,
3755 const WebPluginParams& params) { 3809 const WebPluginParams& params,
3810 PluginGroup* group) {
3756 // |blocked_plugin| will delete itself when the WebViewPlugin is destroyed. 3811 // |blocked_plugin| will delete itself when the WebViewPlugin is destroyed.
3757 BlockedPlugin* blocked_plugin = new BlockedPlugin(this, frame, params); 3812 BlockedPlugin* blocked_plugin = new BlockedPlugin(this, frame, params, group);
3758 WebViewPlugin* plugin = blocked_plugin->plugin(); 3813 WebViewPlugin* plugin = blocked_plugin->plugin();
3759 webkit_preferences_.Apply(plugin->web_view()); 3814 WebView* web_view = plugin->web_view();
3815 webkit_preferences_.Apply(web_view);
3760 return plugin; 3816 return plugin;
3761 } 3817 }
3762 3818
3763 void RenderView::OnZoom(PageZoom::Function function) { 3819 void RenderView::OnZoom(PageZoom::Function function) {
3764 if (!webview()) // Not sure if this can happen, but no harm in being safe. 3820 if (!webview()) // Not sure if this can happen, but no harm in being safe.
3765 return; 3821 return;
3766 3822
3767 webview()->hidePopups(); 3823 webview()->hidePopups();
3768 3824
3769 int zoom_level = webview()->zoomLevel(); 3825 int zoom_level = webview()->zoomLevel();
(...skipping 234 matching lines...) Expand 10 before | Expand all | Expand 10 after
4004 void RenderView::OnRevertTranslation(int page_id) { 4060 void RenderView::OnRevertTranslation(int page_id) {
4005 translate_helper_.RevertTranslation(page_id); 4061 translate_helper_.RevertTranslation(page_id);
4006 } 4062 }
4007 4063
4008 void RenderView::OnInstallMissingPlugin() { 4064 void RenderView::OnInstallMissingPlugin() {
4009 // This could happen when the first default plugin is deleted. 4065 // This could happen when the first default plugin is deleted.
4010 if (first_default_plugin_) 4066 if (first_default_plugin_)
4011 first_default_plugin_->InstallMissingPlugin(); 4067 first_default_plugin_->InstallMissingPlugin();
4012 } 4068 }
4013 4069
4070 void RenderView::OnLoadBlockedPlugins() {
4071 NotificationService::current()->Notify(NotificationType::SHOULD_LOAD_PLUGINS,
4072 Source<RenderView>(this),
4073 NotificationService::NoDetails());
4074 }
4075
4014 void RenderView::OnFileChooserResponse(const std::vector<FilePath>& paths) { 4076 void RenderView::OnFileChooserResponse(const std::vector<FilePath>& paths) {
4015 // This could happen if we navigated to a different page before the user 4077 // This could happen if we navigated to a different page before the user
4016 // closed the chooser. 4078 // closed the chooser.
4017 if (file_chooser_completions_.empty()) 4079 if (file_chooser_completions_.empty())
4018 return; 4080 return;
4019 4081
4020 WebVector<WebString> ws_file_names(paths.size()); 4082 WebVector<WebString> ws_file_names(paths.size());
4021 for (size_t i = 0; i < paths.size(); ++i) 4083 for (size_t i = 0; i < paths.size(); ++i)
4022 ws_file_names[i] = webkit_glue::FilePathToWebString(paths[i]); 4084 ws_file_names[i] = webkit_glue::FilePathToWebString(paths[i]);
4023 4085
(...skipping 1322 matching lines...) Expand 10 before | Expand all | Expand 10 after
5346 webkit_glue::FormData form; 5408 webkit_glue::FormData form;
5347 const WebInputElement element = node.toConst<WebInputElement>(); 5409 const WebInputElement element = node.toConst<WebInputElement>();
5348 if (!form_manager_.FindFormWithFormControlElement( 5410 if (!form_manager_.FindFormWithFormControlElement(
5349 element, FormManager::REQUIRE_NONE, &form)) 5411 element, FormManager::REQUIRE_NONE, &form))
5350 return; 5412 return;
5351 5413
5352 autofill_action_ = action; 5414 autofill_action_ = action;
5353 Send(new ViewHostMsg_FillAutoFillFormData( 5415 Send(new ViewHostMsg_FillAutoFillFormData(
5354 routing_id_, autofill_query_id_, form, value, label, unique_id)); 5416 routing_id_, autofill_query_id_, form, value, label, unique_id));
5355 } 5417 }
OLDNEW
« no previous file with comments | « chrome/renderer/render_view.h ('k') | chrome/renderer/resources/blocked_plugin.html » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698