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

Side by Side Diff: content/ppapi_plugin/broker_process_dispatcher.cc

Issue 2069853002: Ignore certain messages in plugin broker process if they are not sent by the (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: . Created 4 years, 6 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 | « content/ppapi_plugin/broker_process_dispatcher.h ('k') | content/ppapi_plugin/ppapi_thread.h » ('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) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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 "content/ppapi_plugin/broker_process_dispatcher.h" 5 #include "content/ppapi_plugin/broker_process_dispatcher.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 8
9 #include <memory> 9 #include <memory>
10 10
11 #include "base/bind.h" 11 #include "base/bind.h"
12 #include "base/bind_helpers.h" 12 #include "base/bind_helpers.h"
13 #include "base/debug/dump_without_crashing.h"
13 #include "base/strings/utf_string_conversions.h" 14 #include "base/strings/utf_string_conversions.h"
14 #include "build/build_config.h" 15 #include "build/build_config.h"
15 #include "content/child/child_process.h" 16 #include "content/child/child_process.h"
16 #include "ppapi/c/pp_bool.h" 17 #include "ppapi/c/pp_bool.h"
17 #include "ppapi/c/private/ppp_flash_browser_operations.h" 18 #include "ppapi/c/private/ppp_flash_browser_operations.h"
18 #include "ppapi/proxy/ppapi_messages.h" 19 #include "ppapi/proxy/ppapi_messages.h"
19 20
20 namespace content { 21 namespace content {
21 namespace { 22 namespace {
22 23
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
70 site_vector.clear(); 71 site_vector.clear();
71 } 72 }
72 context->dispatcher->OnGetPermissionSettingsCompleted( 73 context->dispatcher->OnGetPermissionSettingsCompleted(
73 context->request_id, PP_ToBool(success), default_permission, site_vector); 74 context->request_id, PP_ToBool(success), default_permission, site_vector);
74 } 75 }
75 76
76 } // namespace 77 } // namespace
77 78
78 BrokerProcessDispatcher::BrokerProcessDispatcher( 79 BrokerProcessDispatcher::BrokerProcessDispatcher(
79 PP_GetInterface_Func get_plugin_interface, 80 PP_GetInterface_Func get_plugin_interface,
80 PP_ConnectInstance_Func connect_instance) 81 PP_ConnectInstance_Func connect_instance,
82 bool peer_is_browser)
81 : ppapi::proxy::BrokerSideDispatcher(connect_instance), 83 : ppapi::proxy::BrokerSideDispatcher(connect_instance),
82 get_plugin_interface_(get_plugin_interface), 84 get_plugin_interface_(get_plugin_interface),
83 flash_browser_operations_1_3_(NULL), 85 flash_browser_operations_1_3_(NULL),
84 flash_browser_operations_1_2_(NULL), 86 flash_browser_operations_1_2_(NULL),
85 flash_browser_operations_1_0_(NULL) { 87 flash_browser_operations_1_0_(NULL),
88 peer_is_browser_(peer_is_browser) {
86 if (get_plugin_interface) { 89 if (get_plugin_interface) {
87 flash_browser_operations_1_0_ = 90 flash_browser_operations_1_0_ =
88 static_cast<const PPP_Flash_BrowserOperations_1_0*>( 91 static_cast<const PPP_Flash_BrowserOperations_1_0*>(
89 get_plugin_interface_(PPP_FLASH_BROWSEROPERATIONS_INTERFACE_1_0)); 92 get_plugin_interface_(PPP_FLASH_BROWSEROPERATIONS_INTERFACE_1_0));
90 93
91 flash_browser_operations_1_2_ = 94 flash_browser_operations_1_2_ =
92 static_cast<const PPP_Flash_BrowserOperations_1_2*>( 95 static_cast<const PPP_Flash_BrowserOperations_1_2*>(
93 get_plugin_interface_(PPP_FLASH_BROWSEROPERATIONS_INTERFACE_1_2)); 96 get_plugin_interface_(PPP_FLASH_BROWSEROPERATIONS_INTERFACE_1_2));
94 97
95 flash_browser_operations_1_3_ = 98 flash_browser_operations_1_3_ =
96 static_cast<const PPP_Flash_BrowserOperations_1_3*>( 99 static_cast<const PPP_Flash_BrowserOperations_1_3*>(
97 get_plugin_interface_(PPP_FLASH_BROWSEROPERATIONS_INTERFACE_1_3)); 100 get_plugin_interface_(PPP_FLASH_BROWSEROPERATIONS_INTERFACE_1_3));
98 } 101 }
99 } 102 }
100 103
101 BrokerProcessDispatcher::~BrokerProcessDispatcher() { 104 BrokerProcessDispatcher::~BrokerProcessDispatcher() {
102 DVLOG(1) << "BrokerProcessDispatcher::~BrokerProcessDispatcher()"; 105 DVLOG(1) << "BrokerProcessDispatcher::~BrokerProcessDispatcher()";
103 // Don't free the process right away. This timer allows the child process 106 // Don't free the process right away. This timer allows the child process
104 // to be re-used if the user rapidly goes to a new page that requires this 107 // to be re-used if the user rapidly goes to a new page that requires this
105 // plugin. This is the case for common plugins where they may be used on a 108 // plugin. This is the case for common plugins where they may be used on a
106 // source and destination page of a navigation. We don't want to tear down 109 // source and destination page of a navigation. We don't want to tear down
107 // and re-start processes each time in these cases. 110 // and re-start processes each time in these cases.
108 process_ref_.ReleaseWithDelay( 111 process_ref_.ReleaseWithDelay(
109 base::TimeDelta::FromSeconds(kBrokerReleaseTimeSeconds)); 112 base::TimeDelta::FromSeconds(kBrokerReleaseTimeSeconds));
110 } 113 }
111 114
112 bool BrokerProcessDispatcher::OnMessageReceived(const IPC::Message& msg) { 115 bool BrokerProcessDispatcher::OnMessageReceived(const IPC::Message& msg) {
116 if (BrokerSideDispatcher::OnMessageReceived(msg))
117 return true;
118
119 if (!peer_is_browser_) {
120 // We might want to consider killing the peer instead is we see problems in
121 // the future.
122 if (msg.type() == PpapiMsg_GetSitesWithData::ID ||
123 msg.type() == PpapiMsg_ClearSiteData::ID ||
124 msg.type() == PpapiMsg_DeauthorizeContentLicenses::ID ||
125 msg.type() == PpapiMsg_GetPermissionSettings::ID ||
126 msg.type() == PpapiMsg_SetDefaultPermission::ID ||
127 msg.type() == PpapiMsg_SetSitePermission::ID) {
128 base::debug::DumpWithoutCrashing();
129 }
130 return false;
131 }
132
133 bool handled = true;
113 IPC_BEGIN_MESSAGE_MAP(BrokerProcessDispatcher, msg) 134 IPC_BEGIN_MESSAGE_MAP(BrokerProcessDispatcher, msg)
114 IPC_MESSAGE_HANDLER(PpapiMsg_GetSitesWithData, OnGetSitesWithData) 135 IPC_MESSAGE_HANDLER(PpapiMsg_GetSitesWithData, OnGetSitesWithData)
115 IPC_MESSAGE_HANDLER(PpapiMsg_ClearSiteData, OnClearSiteData) 136 IPC_MESSAGE_HANDLER(PpapiMsg_ClearSiteData, OnClearSiteData)
116 IPC_MESSAGE_HANDLER(PpapiMsg_DeauthorizeContentLicenses, 137 IPC_MESSAGE_HANDLER(PpapiMsg_DeauthorizeContentLicenses,
117 OnDeauthorizeContentLicenses) 138 OnDeauthorizeContentLicenses)
118 IPC_MESSAGE_HANDLER(PpapiMsg_GetPermissionSettings, OnGetPermissionSettings) 139 IPC_MESSAGE_HANDLER(PpapiMsg_GetPermissionSettings,
140 OnGetPermissionSettings)
119 IPC_MESSAGE_HANDLER(PpapiMsg_SetDefaultPermission, OnSetDefaultPermission) 141 IPC_MESSAGE_HANDLER(PpapiMsg_SetDefaultPermission, OnSetDefaultPermission)
120 IPC_MESSAGE_HANDLER(PpapiMsg_SetSitePermission, OnSetSitePermission) 142 IPC_MESSAGE_HANDLER(PpapiMsg_SetSitePermission, OnSetSitePermission)
121 IPC_MESSAGE_UNHANDLED(return BrokerSideDispatcher::OnMessageReceived(msg)) 143 IPC_MESSAGE_UNHANDLED(handled = false)
122 IPC_END_MESSAGE_MAP() 144 IPC_END_MESSAGE_MAP()
123 return true; 145 return handled;
124 } 146 }
125 147
126 void BrokerProcessDispatcher::OnGetPermissionSettingsCompleted( 148 void BrokerProcessDispatcher::OnGetPermissionSettingsCompleted(
127 uint32_t request_id, 149 uint32_t request_id,
128 bool success, 150 bool success,
129 PP_Flash_BrowserOperations_Permission default_permission, 151 PP_Flash_BrowserOperations_Permission default_permission,
130 const ppapi::FlashSiteSettings& sites) { 152 const ppapi::FlashSiteSettings& sites) {
131 Send(new PpapiHostMsg_GetPermissionSettingsResult( 153 Send(new PpapiHostMsg_GetPermissionSettingsResult(
132 request_id, success, default_permission, sites)); 154 request_id, success, default_permission, sites));
133 } 155 }
(...skipping 188 matching lines...) Expand 10 before | Expand all | Expand 10 after
322 data_str.c_str(), setting_type, 344 data_str.c_str(), setting_type,
323 static_cast<uint32_t>(sites.size()), site_array.get()); 345 static_cast<uint32_t>(sites.size()), site_array.get());
324 346
325 return PP_ToBool(result); 347 return PP_ToBool(result);
326 } 348 }
327 349
328 return false; 350 return false;
329 } 351 }
330 352
331 } // namespace content 353 } // namespace content
OLDNEW
« no previous file with comments | « content/ppapi_plugin/broker_process_dispatcher.h ('k') | content/ppapi_plugin/ppapi_thread.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698