15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/ppapi_plugin/broker_process_dispatcher.h" 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/bind.h" 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/bind_helpers.h" 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/scoped_ptr.h" 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/strings/utf_string_conversions.h" 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/child/child_process.h" 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ppapi/c/pp_bool.h" 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ppapi/c/private/ppp_flash_browser_operations.h" 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ppapi/proxy/ppapi_messages.h" 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace content { 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace { 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// How long we wait before releasing the broker process. 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const int kBrokerReleaseTimeSeconds = 30; 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)std::string ConvertPluginDataPath(const base::FilePath& plugin_data_path) { 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The string is always 8-bit, convert on Windows. 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_WIN) 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return base::WideToUTF8(plugin_data_path.value()); 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return plugin_data_path.value(); 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct GetPermissionSettingsContext { 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetPermissionSettingsContext( 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const base::WeakPtr<BrokerProcessDispatcher> in_dispatcher, 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) uint32 in_request_id) 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : dispatcher(in_dispatcher), 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) request_id(in_request_id) { 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::WeakPtr<BrokerProcessDispatcher> dispatcher; 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) uint32 request_id; 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void GetPermissionSettingsCallback( 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void* user_data, 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PP_Bool success, 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PP_Flash_BrowserOperations_Permission default_permission, 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) uint32_t site_count, 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const PP_Flash_BrowserOperations_SiteSetting sites[]) { 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<GetPermissionSettingsContext> context( 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) reinterpret_cast<GetPermissionSettingsContext*>(user_data)); 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!context->dispatcher.get()) 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ppapi::FlashSiteSettings site_vector; 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (success) { 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) site_vector.reserve(site_count); 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (uint32_t i = 0; i < site_count; ++i) { 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!sites[i].site) { 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) success = PP_FALSE; 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) site_vector.push_back( 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ppapi::FlashSiteSetting(sites[i].site, sites[i].permission)); 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!success) 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) site_vector.clear(); 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) context->dispatcher->OnGetPermissionSettingsCompleted( 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) context->request_id, PP_ToBool(success), default_permission, site_vector); 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)BrokerProcessDispatcher::BrokerProcessDispatcher( 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PP_GetInterface_Func get_plugin_interface, 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PP_ConnectInstance_Func connect_instance) 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : ppapi::proxy::BrokerSideDispatcher(connect_instance), 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) get_plugin_interface_(get_plugin_interface), 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) flash_browser_operations_1_3_(NULL), 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) flash_browser_operations_1_2_(NULL), 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) flash_browser_operations_1_0_(NULL) { 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (get_plugin_interface) { 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) flash_browser_operations_1_0_ = 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static_cast<const PPP_Flash_BrowserOperations_1_0*>( 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) get_plugin_interface_(PPP_FLASH_BROWSEROPERATIONS_INTERFACE_1_0)); 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) flash_browser_operations_1_2_ = 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static_cast<const PPP_Flash_BrowserOperations_1_2*>( 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) get_plugin_interface_(PPP_FLASH_BROWSEROPERATIONS_INTERFACE_1_2)); 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) flash_browser_operations_1_3_ = 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static_cast<const PPP_Flash_BrowserOperations_1_3*>( 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) get_plugin_interface_(PPP_FLASH_BROWSEROPERATIONS_INTERFACE_1_3)); 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)BrokerProcessDispatcher::~BrokerProcessDispatcher() { 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DVLOG(1) << "BrokerProcessDispatcher::~BrokerProcessDispatcher()"; 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Don't free the process right away. This timer allows the child process 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // to be re-used if the user rapidly goes to a new page that requires this 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // plugin. This is the case for common plugins where they may be used on a 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // source and destination page of a navigation. We don't want to tear down 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // and re-start processes each time in these cases. 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) process_ref_.ReleaseWithDelay( 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::TimeDelta::FromSeconds(kBrokerReleaseTimeSeconds)); 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool BrokerProcessDispatcher::OnMessageReceived(const IPC::Message& msg) { 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IPC_BEGIN_MESSAGE_MAP(BrokerProcessDispatcher, msg) 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IPC_MESSAGE_HANDLER(PpapiMsg_GetSitesWithData, OnGetSitesWithData) 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IPC_MESSAGE_HANDLER(PpapiMsg_ClearSiteData, OnClearSiteData) 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IPC_MESSAGE_HANDLER(PpapiMsg_DeauthorizeContentLicenses, 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) OnDeauthorizeContentLicenses) 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IPC_MESSAGE_HANDLER(PpapiMsg_GetPermissionSettings, OnGetPermissionSettings) 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IPC_MESSAGE_HANDLER(PpapiMsg_SetDefaultPermission, OnSetDefaultPermission) 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IPC_MESSAGE_HANDLER(PpapiMsg_SetSitePermission, OnSetSitePermission) 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IPC_MESSAGE_UNHANDLED(return BrokerSideDispatcher::OnMessageReceived(msg)) 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IPC_END_MESSAGE_MAP() 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return true; 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void BrokerProcessDispatcher::OnGetPermissionSettingsCompleted( 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) uint32 request_id, 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool success, 1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PP_Flash_BrowserOperations_Permission default_permission, 1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const ppapi::FlashSiteSettings& sites) { 1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Send(new PpapiHostMsg_GetPermissionSettingsResult( 1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) request_id, success, default_permission, sites)); 1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void BrokerProcessDispatcher::OnGetSitesWithData( 1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) uint32 request_id, 1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const base::FilePath& plugin_data_path) { 1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<std::string> sites; 1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetSitesWithData(plugin_data_path, &sites); 1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Send(new PpapiHostMsg_GetSitesWithDataResult(request_id, sites)); 1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void BrokerProcessDispatcher::OnClearSiteData( 1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) uint32 request_id, 1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const base::FilePath& plugin_data_path, 1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& site, 1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) uint64 flags, 1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) uint64 max_age) { 1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Send(new PpapiHostMsg_ClearSiteDataResult( 1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) request_id, ClearSiteData(plugin_data_path, site, flags, max_age))); 1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void BrokerProcessDispatcher::OnDeauthorizeContentLicenses( 1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) uint32 request_id, 1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const base::FilePath& plugin_data_path) { 1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Send(new PpapiHostMsg_DeauthorizeContentLicensesResult( 1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) request_id, DeauthorizeContentLicenses(plugin_data_path))); 1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void BrokerProcessDispatcher::OnGetPermissionSettings( 1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) uint32 request_id, 1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const base::FilePath& plugin_data_path, 1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PP_Flash_BrowserOperations_SettingType setting_type) { 1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (flash_browser_operations_1_3_) { 1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string data_str = ConvertPluginDataPath(plugin_data_path); 1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The GetPermissionSettingsContext object will be deleted in 1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // GetPermissionSettingsCallback(). 1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) flash_browser_operations_1_3_->GetPermissionSettings( 1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) data_str.c_str(), setting_type, &GetPermissionSettingsCallback, 1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new GetPermissionSettingsContext(AsWeakPtr(), request_id)); 1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (flash_browser_operations_1_2_) { 1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string data_str = ConvertPluginDataPath(plugin_data_path); 1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The GetPermissionSettingsContext object will be deleted in 1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // GetPermissionSettingsCallback(). 1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) flash_browser_operations_1_2_->GetPermissionSettings( 1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) data_str.c_str(), setting_type, &GetPermissionSettingsCallback, 1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new GetPermissionSettingsContext(AsWeakPtr(), request_id)); 1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) OnGetPermissionSettingsCompleted( 1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) request_id, false, PP_FLASH_BROWSEROPERATIONS_PERMISSION_DEFAULT, 1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ppapi::FlashSiteSettings()); 1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void BrokerProcessDispatcher::OnSetDefaultPermission( 1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) uint32 request_id, 1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const base::FilePath& plugin_data_path, 1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PP_Flash_BrowserOperations_SettingType setting_type, 1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PP_Flash_BrowserOperations_Permission permission, 1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool clear_site_specific) { 1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Send(new PpapiHostMsg_SetDefaultPermissionResult( 1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) request_id, 1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SetDefaultPermission(plugin_data_path, setting_type, permission, 1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) clear_site_specific))); 1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void BrokerProcessDispatcher::OnSetSitePermission( 2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) uint32 request_id, 2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const base::FilePath& plugin_data_path, 2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PP_Flash_BrowserOperations_SettingType setting_type, 2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const ppapi::FlashSiteSettings& sites) { 2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Send(new PpapiHostMsg_SetSitePermissionResult( 2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) request_id, SetSitePermission(plugin_data_path, setting_type, sites))); 2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void BrokerProcessDispatcher::GetSitesWithData( 2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const base::FilePath& plugin_data_path, 2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<std::string>* site_vector) { 2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string data_str = ConvertPluginDataPath(plugin_data_path); 2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (flash_browser_operations_1_3_) { 2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) char** sites = NULL; 2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) flash_browser_operations_1_3_->GetSitesWithData(data_str.c_str(), &sites); 2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!sites) 2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (size_t i = 0; sites[i]; ++i) 2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) site_vector->push_back(sites[i]); 2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) flash_browser_operations_1_3_->FreeSiteList(sites); 2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool BrokerProcessDispatcher::ClearSiteData( 2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const base::FilePath& plugin_data_path, 2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& site, 2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) uint64 flags, 2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) uint64 max_age) { 2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string data_str = ConvertPluginDataPath(plugin_data_path); 2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (flash_browser_operations_1_3_) { 2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) flash_browser_operations_1_3_->ClearSiteData( 2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) data_str.c_str(), site.empty() ? NULL : site.c_str(), flags, max_age); 2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return true; 2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // TODO(viettrungluu): Remove this (and the 1.0 interface) sometime after M21 2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // goes to Stable. 2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (flash_browser_operations_1_2_) { 2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) flash_browser_operations_1_2_->ClearSiteData( 2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) data_str.c_str(), site.empty() ? NULL : site.c_str(), flags, max_age); 2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return true; 2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (flash_browser_operations_1_0_) { 2475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) flash_browser_operations_1_0_->ClearSiteData( 2485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) data_str.c_str(), site.empty() ? NULL : site.c_str(), flags, max_age); 2495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return true; 2505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 2535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool BrokerProcessDispatcher::DeauthorizeContentLicenses( 2565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const base::FilePath& plugin_data_path) { 2575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (flash_browser_operations_1_3_) { 2585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string data_str = ConvertPluginDataPath(plugin_data_path); 2595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return PP_ToBool(flash_browser_operations_1_3_->DeauthorizeContentLicenses( 2605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) data_str.c_str())); 2615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (flash_browser_operations_1_2_) { 2645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string data_str = ConvertPluginDataPath(plugin_data_path); 2655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return PP_ToBool(flash_browser_operations_1_2_->DeauthorizeContentLicenses( 2665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) data_str.c_str())); 2675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 2705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool BrokerProcessDispatcher::SetDefaultPermission( 2735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const base::FilePath& plugin_data_path, 2745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PP_Flash_BrowserOperations_SettingType setting_type, 2755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PP_Flash_BrowserOperations_Permission permission, 2765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool clear_site_specific) { 2775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (flash_browser_operations_1_3_) { 2785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string data_str = ConvertPluginDataPath(plugin_data_path); 2795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return PP_ToBool(flash_browser_operations_1_3_->SetDefaultPermission( 2805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) data_str.c_str(), setting_type, permission, 2815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PP_FromBool(clear_site_specific))); 2825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (flash_browser_operations_1_2_) { 2855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string data_str = ConvertPluginDataPath(plugin_data_path); 2865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return PP_ToBool(flash_browser_operations_1_2_->SetDefaultPermission( 2875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) data_str.c_str(), setting_type, permission, 2885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PP_FromBool(clear_site_specific))); 2895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 2925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool BrokerProcessDispatcher::SetSitePermission( 2955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const base::FilePath& plugin_data_path, 2965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PP_Flash_BrowserOperations_SettingType setting_type, 2975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const ppapi::FlashSiteSettings& sites) { 2985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (sites.empty()) 2995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return true; 3005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string data_str = ConvertPluginDataPath(plugin_data_path); 3025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<PP_Flash_BrowserOperations_SiteSetting[]> site_array( 3035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new PP_Flash_BrowserOperations_SiteSetting[sites.size()]); 3045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (size_t i = 0; i < sites.size(); ++i) { 3065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) site_array[i].site = sites[i].site.c_str(); 3075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) site_array[i].permission = sites[i].permission; 3085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (flash_browser_operations_1_3_) { 3115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PP_Bool result = flash_browser_operations_1_3_->SetSitePermission( 3125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) data_str.c_str(), setting_type, sites.size(), site_array.get()); 3135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 314 return PP_ToBool(result); 315 } 316 317 if (flash_browser_operations_1_2_) { 318 PP_Bool result = flash_browser_operations_1_2_->SetSitePermission( 319 data_str.c_str(), setting_type, sites.size(), site_array.get()); 320 321 return PP_ToBool(result); 322 } 323 324 return false; 325} 326 327} // namespace content 328