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

Unified Diff: content/ppapi_plugin/broker_process_dispatcher.cc

Issue 10479015: Pepper Flash settings integration - camera and microphone. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: . Created 8 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 side-by-side diff with in-line comments
Download patch
Index: content/ppapi_plugin/broker_process_dispatcher.cc
diff --git a/content/ppapi_plugin/broker_process_dispatcher.cc b/content/ppapi_plugin/broker_process_dispatcher.cc
index 7844639d98f91511c89040054ce9eab46aff7ee6..985cdeab33d2b5f540f265b884fa3ff687b64290 100644
--- a/content/ppapi_plugin/broker_process_dispatcher.cc
+++ b/content/ppapi_plugin/broker_process_dispatcher.cc
@@ -6,11 +6,15 @@
#include "base/bind.h"
#include "base/bind_helpers.h"
+#include "base/memory/scoped_ptr.h"
#include "base/utf_string_conversions.h"
#include "content/common/child_process.h"
#include "ppapi/c/pp_bool.h"
#include "ppapi/c/private/ppp_flash_browser_operations.h"
#include "ppapi/proxy/ppapi_messages.h"
+#include "ppapi/shared_impl/ppapi_globals.h"
+#include "ppapi/shared_impl/var.h"
+#include "ppapi/shared_impl/var_tracker.h"
namespace {
@@ -26,14 +30,70 @@ std::string ConvertPluginDataPath(const FilePath& plugin_data_path) {
#endif
}
+struct GetPermissionSettingsContext {
+ GetPermissionSettingsContext(
+ const base::WeakPtr<BrokerProcessDispatcher> in_dispatcher,
+ uint32 in_request_id)
+ : dispatcher(in_dispatcher),
+ request_id(in_request_id) {
+ }
+
+ base::WeakPtr<BrokerProcessDispatcher> dispatcher;
+ uint32 request_id;
+};
+
+void GetPermissionSettingsCallback(
+ void* user_data,
+ PP_Bool success,
+ PP_Flash_BrowserOperations_Permission default_permission,
+ uint32_t site_count,
+ const PP_Flash_BrowserOperations_SiteSetting sites[]) {
+ scoped_ptr<GetPermissionSettingsContext> context(
+ reinterpret_cast<GetPermissionSettingsContext*>(user_data));
+
+ if (!context->dispatcher)
+ return;
+
+ ppapi::FlashSiteSettings site_vector;
+ if (success) {
+ site_vector.reserve(site_count);
+ for (uint32_t i = 0; i < site_count; ++i) {
+ ppapi::StringVar* string_var = ppapi::StringVar::FromPPVar(sites[i].site);
+ if (!string_var) {
+ success = PP_FALSE;
+ break;
+ }
+ site_vector.push_back(
+ ppapi::FlashSiteSetting(string_var->value(), sites[i].permission));
+ }
+
+ if (!success)
+ site_vector.clear();
+ }
+ context->dispatcher->OnGetPermissionSettingsCompleted(
+ context->request_id, PP_ToBool(success), default_permission, site_vector);
+}
+
} // namespace
BrokerProcessDispatcher::BrokerProcessDispatcher(
PP_GetInterface_Func get_plugin_interface,
PP_ConnectInstance_Func connect_instance)
: ppapi::proxy::BrokerSideDispatcher(connect_instance),
- get_plugin_interface_(get_plugin_interface) {
+ get_plugin_interface_(get_plugin_interface),
+ flash_browser_operations_1_1_(NULL),
+ flash_browser_operations_1_0_(NULL) {
ChildProcess::current()->AddRefProcess();
+
+ if (get_plugin_interface) {
+ flash_browser_operations_1_0_ =
+ static_cast<const PPP_Flash_BrowserOperations_1_0*>(
+ get_plugin_interface_(PPP_FLASH_BROWSEROPERATIONS_INTERFACE_1_0));
+
+ flash_browser_operations_1_1_ =
+ static_cast<const PPP_Flash_BrowserOperations_1_1*>(
+ get_plugin_interface_(PPP_FLASH_BROWSEROPERATIONS_INTERFACE_1_1));
+ }
}
BrokerProcessDispatcher::~BrokerProcessDispatcher() {
@@ -55,11 +115,25 @@ bool BrokerProcessDispatcher::OnMessageReceived(const IPC::Message& msg) {
IPC_MESSAGE_HANDLER(PpapiMsg_ClearSiteData, OnMsgClearSiteData)
IPC_MESSAGE_HANDLER(PpapiMsg_DeauthorizeContentLicenses,
OnMsgDeauthorizeContentLicenses)
+ IPC_MESSAGE_HANDLER(PpapiMsg_GetPermissionSettings,
+ OnMsgGetPermissionSettings)
+ IPC_MESSAGE_HANDLER(PpapiMsg_SetDefaultPermission,
+ OnMsgSetDefaultPermission)
+ IPC_MESSAGE_HANDLER(PpapiMsg_SetSitePermission, OnMsgSetSitePermission)
IPC_MESSAGE_UNHANDLED(return BrokerSideDispatcher::OnMessageReceived(msg))
IPC_END_MESSAGE_MAP()
return true;
}
+void BrokerProcessDispatcher::OnGetPermissionSettingsCompleted(
+ uint32 request_id,
+ bool success,
+ PP_Flash_BrowserOperations_Permission default_permission,
+ const ppapi::FlashSiteSettings& sites) {
+ Send(new PpapiHostMsg_GetPermissionSettingsResult(
+ request_id, success, default_permission, sites));
+}
+
void BrokerProcessDispatcher::OnMsgClearSiteData(
const FilePath& plugin_data_path,
const std::string& site,
@@ -76,37 +150,107 @@ void BrokerProcessDispatcher::OnMsgDeauthorizeContentLicenses(
request_id, DeauthorizeContentLicenses(plugin_data_path)));
}
+void BrokerProcessDispatcher::OnMsgGetPermissionSettings(
+ uint32 request_id,
+ const FilePath& plugin_data_path,
+ PP_Flash_BrowserOperations_SettingType setting_type) {
+ if (!flash_browser_operations_1_1_) {
+ OnGetPermissionSettingsCompleted(
+ request_id, false, PP_FLASH_BROWSEROPERATIONS_PERMISSION_DEFAULT,
+ ppapi::FlashSiteSettings());
+ return;
+ }
+
+ std::string data_str = ConvertPluginDataPath(plugin_data_path);
+ // The GetPermissionSettingsContext object will be deleted in
+ // GetPermissionSettingsCallback().
+ flash_browser_operations_1_1_->GetPermissionSettings(
+ data_str.c_str(), setting_type, &GetPermissionSettingsCallback,
+ new GetPermissionSettingsContext(AsWeakPtr(), request_id));
+}
+
+void BrokerProcessDispatcher::OnMsgSetDefaultPermission(
+ uint32 request_id,
+ const FilePath& plugin_data_path,
+ PP_Flash_BrowserOperations_SettingType setting_type,
+ PP_Flash_BrowserOperations_Permission permission,
+ bool clear_site_specific) {
+ Send(new PpapiHostMsg_SetDefaultPermissionResult(
+ request_id,
+ SetDefaultPermission(plugin_data_path, setting_type, permission,
+ clear_site_specific)));
+}
+
+void BrokerProcessDispatcher::OnMsgSetSitePermission(
+ uint32 request_id,
+ const FilePath& plugin_data_path,
+ PP_Flash_BrowserOperations_SettingType setting_type,
+ const ppapi::FlashSiteSettings& sites) {
+ Send(new PpapiHostMsg_SetSitePermissionResult(
+ request_id, SetSitePermission(plugin_data_path, setting_type, sites)));
+}
+
bool BrokerProcessDispatcher::ClearSiteData(const FilePath& plugin_data_path,
const std::string& site,
uint64 flags,
uint64 max_age) {
- if (!get_plugin_interface_)
- return false;
- const PPP_Flash_BrowserOperations_1_0* browser_interface =
- static_cast<const PPP_Flash_BrowserOperations_1_0*>(
- get_plugin_interface_(PPP_FLASH_BROWSEROPERATIONS_INTERFACE_1_0));
- if (!browser_interface)
+ if (!flash_browser_operations_1_0_)
return false;
std::string data_str = ConvertPluginDataPath(plugin_data_path);
- browser_interface->ClearSiteData(data_str.c_str(),
- site.empty() ? NULL : site.c_str(),
- flags, max_age);
+ flash_browser_operations_1_0_->ClearSiteData(
+ data_str.c_str(), site.empty() ? NULL : site.c_str(), flags, max_age);
return true;
}
bool BrokerProcessDispatcher::DeauthorizeContentLicenses(
const FilePath& plugin_data_path) {
- if (!get_plugin_interface_)
- return false;
- const PPP_Flash_BrowserOperations_1_1* browser_interface =
- static_cast<const PPP_Flash_BrowserOperations_1_1*>(
- get_plugin_interface_(PPP_FLASH_BROWSEROPERATIONS_INTERFACE_1_1));
- if (!browser_interface)
+ if (!flash_browser_operations_1_1_)
return false;
std::string data_str = ConvertPluginDataPath(plugin_data_path);
- return PP_ToBool(browser_interface->DeauthorizeContentLicenses(
+ return PP_ToBool(flash_browser_operations_1_1_->DeauthorizeContentLicenses(
data_str.c_str()));
}
+bool BrokerProcessDispatcher::SetDefaultPermission(
+ const FilePath& plugin_data_path,
+ PP_Flash_BrowserOperations_SettingType setting_type,
+ PP_Flash_BrowserOperations_Permission permission,
+ bool clear_site_specific) {
+ if (!flash_browser_operations_1_1_)
+ return false;
+
+ std::string data_str = ConvertPluginDataPath(plugin_data_path);
+ return PP_ToBool(flash_browser_operations_1_1_->SetDefaultPermission(
+ data_str.c_str(), setting_type, permission,
+ PP_FromBool(clear_site_specific)));
+}
+
+bool BrokerProcessDispatcher::SetSitePermission(
+ const FilePath& plugin_data_path,
+ PP_Flash_BrowserOperations_SettingType setting_type,
+ const ppapi::FlashSiteSettings& sites) {
+ if (!flash_browser_operations_1_1_)
+ return false;
+
+ if (sites.empty())
+ return true;
+
+ std::string data_str = ConvertPluginDataPath(plugin_data_path);
+ scoped_array<PP_Flash_BrowserOperations_SiteSetting> site_array(
+ new PP_Flash_BrowserOperations_SiteSetting[sites.size()]);
+
+ for (size_t i = 0; i < sites.size(); ++i) {
+ site_array[i].site = ppapi::StringVar::StringToPPVar(sites[i].site);
+ site_array[i].permission = sites[i].permission;
+ }
+
+ PP_Bool result = flash_browser_operations_1_1_->SetSitePermission(
+ data_str.c_str(), setting_type, sites.size(), site_array.get());
+
+ for (size_t i = 0; i < sites.size(); ++i)
+ ppapi::PpapiGlobals::Get()->GetVarTracker()->ReleaseVar(site_array[i].site);
+
+ return PP_ToBool(result);
+}

Powered by Google App Engine
This is Rietveld 408576698