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 "chrome/browser/pepper_flash_settings_manager.h" 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <map> 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <utility> 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <vector> 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/bind.h" 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/compiler_specific.h" 131320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "base/files/file_util.h" 142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/prefs/pref_service.h" 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/sequenced_task_runner_helpers.h" 16868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/strings/utf_string_conversions.h" 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/plugins/plugin_prefs.h" 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/profiles/profile.h" 19c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/browser/renderer_host/pepper/device_id_fetcher.h" 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/pref_names.h" 21cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "components/pref_registry/pref_registry_syncable.h" 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/browser_context.h" 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/browser_thread.h" 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/pepper_flash_settings_helper.h" 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/plugin_service.h" 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/common/content_constants.h" 27ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch#include "content/public/common/webplugininfo.h" 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ipc/ipc_channel.h" 292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ipc/ipc_listener.h" 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ppapi/proxy/ppapi_messages.h" 31eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "url/gurl.h" 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using content::BrowserThread; 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class PepperFlashSettingsManager::Core 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : public IPC::Listener, 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public base::RefCountedThreadSafe<Core, BrowserThread::DeleteOnIOThread> { 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Core(base::WeakPtr<PepperFlashSettingsManager> manager, 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::BrowserContext* browser_context); 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void Initialize(); 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Notifies the core that it has been detached. Afterwards, no method should 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // be called any more. 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void Detach(); 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void DeauthorizeContentLicenses(uint32 request_id); 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void GetPermissionSettings( 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) uint32 request_id, 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PP_Flash_BrowserOperations_SettingType setting_type); 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void SetDefaultPermission( 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) uint32 request_id, 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PP_Flash_BrowserOperations_SettingType setting_type, 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PP_Flash_BrowserOperations_Permission permission, 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool clear_site_specific); 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void SetSitePermission(uint32 request_id, 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PP_Flash_BrowserOperations_SettingType setting_type, 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const ppapi::FlashSiteSettings& sites); 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void GetSitesWithData(uint32 request_id); 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void ClearSiteData(uint32 request_id, 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& site, 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) uint64 flags, 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) uint64 max_age); 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // IPC::Listener implementation. 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE; 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void OnChannelError() OVERRIDE; 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) friend struct BrowserThread::DeleteOnThread<BrowserThread::IO>; 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) friend class base::DeleteHelper<Core>; 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) enum RequestType { 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) INVALID_REQUEST_TYPE = 0, 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DEAUTHORIZE_CONTENT_LICENSES, 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GET_PERMISSION_SETTINGS, 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SET_DEFAULT_PERMISSION, 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SET_SITE_PERMISSION, 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GET_SITES_WITH_DATA, 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CLEAR_SITE_DATA, 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) enum State { 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) STATE_UNINITIALIZED = 0, 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) STATE_INITIALIZED, 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) STATE_ERROR, 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) STATE_DETACHED, 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) struct PendingRequest { 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PendingRequest() 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : id(0), 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) type(INVALID_REQUEST_TYPE), 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) setting_type(PP_FLASH_BROWSEROPERATIONS_SETTINGTYPE_CAMERAMIC), 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) permission(PP_FLASH_BROWSEROPERATIONS_PERMISSION_DEFAULT), 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) clear_site_specific(false), 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) flags(0), 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) max_age(0) { 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) uint32 id; 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RequestType type; 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Used by GET_PERMISSION_SETTINGS, SET_DEFAULT_PERMISSION and 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // SET_SITE_PERMISSION. 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PP_Flash_BrowserOperations_SettingType setting_type; 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Used by SET_DEFAULT_PERMISSION. 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PP_Flash_BrowserOperations_Permission permission; 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool clear_site_specific; 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Used by SET_SITE_PERMISSION. 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ppapi::FlashSiteSettings sites; 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Used by CLEAR_SITE_DATA 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string site; 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) uint64 flags; 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) uint64 max_age; 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~Core(); 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void ConnectToChannel(bool success, const IPC::ChannelHandle& handle); 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void InitializeOnIOThread(); 1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void DeauthorizeContentLicensesOnIOThread(uint32 request_id); 128c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) void DeauthorizeContentLicensesOnBlockingPool( 129c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) uint32 request_id, 130c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const base::FilePath& profile_path); 131c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) void DeauthorizeContentLicensesInPlugin(uint32 request_id, bool success); 1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void GetPermissionSettingsOnIOThread( 1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) uint32 request_id, 1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PP_Flash_BrowserOperations_SettingType setting_type); 1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void SetDefaultPermissionOnIOThread( 1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) uint32 request_id, 1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PP_Flash_BrowserOperations_SettingType setting_type, 1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PP_Flash_BrowserOperations_Permission permission, 1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool clear_site_specific); 1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void SetSitePermissionOnIOThread( 1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) uint32 request_id, 1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PP_Flash_BrowserOperations_SettingType setting_type, 1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const ppapi::FlashSiteSettings& sites); 1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void GetSitesWithDataOnIOThread(uint32 request_id); 1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void ClearSiteDataOnIOThread(uint32 request_id, 1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& site, 1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) uint64 flags, 1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) uint64 max_age); 1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void DetachOnIOThread(); 1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void NotifyErrorFromIOThread(); 1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void NotifyDeauthorizeContentLicensesCompleted(uint32 request_id, 1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool success); 1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void NotifyGetPermissionSettingsCompleted( 1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) uint32 request_id, 1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool success, 1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PP_Flash_BrowserOperations_Permission default_permission, 1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const ppapi::FlashSiteSettings& sites); 1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void NotifySetDefaultPermissionCompleted(uint32 request_id, bool success); 1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void NotifySetSitePermissionCompleted(uint32 request_id, bool success); 1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void NotifyGetSitesWithDataCompleted(uint32 request_id, 1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::vector<std::string>& sites); 1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void NotifyClearSiteDataCompleted(uint32 request_id, bool success); 1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void NotifyError( 1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::vector<std::pair<uint32, RequestType> >& notifications); 1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Message handlers. 1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void OnDeauthorizeContentLicensesResult(uint32 request_id, bool success); 1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void OnGetPermissionSettingsResult( 1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) uint32 request_id, 1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool success, 1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PP_Flash_BrowserOperations_Permission default_permission, 1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const ppapi::FlashSiteSettings& sites); 1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void OnSetDefaultPermissionResult(uint32 request_id, bool success); 1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void OnSetSitePermissionResult(uint32 request_id, bool success); 1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void OnGetSitesWithDataResult(uint32 request_id, 1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::vector<std::string>& sites); 1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void OnClearSiteDataResult(uint32 request_id, bool success); 1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Used only on the UI thread. 1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::WeakPtr<PepperFlashSettingsManager> manager_; 1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Used only on the I/O thread. 1862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath plugin_data_path_; 1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The channel is NULL until we have opened a connection to the broker 1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // process. Used only on the I/O thread. 1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_ptr<IPC::Channel> channel_; 1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Used only on the I/O thread. 1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) State state_; 1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Requests that need to be sent once the channel to the broker process is 1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // established. Used only on the I/O thread. 1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<PendingRequest> pending_requests_; 1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Requests that have been sent but haven't got replied. Used only on the 1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // I/O thread. 2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::map<uint32, RequestType> pending_responses_; 2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Used only on the I/O thread. 2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_refptr<content::PepperFlashSettingsHelper> helper_; 2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Path for the current profile. Must be retrieved on the UI thread from the 2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // browser context when we start so we can use it later on the I/O thread. 2072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath browser_context_path_; 2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_refptr<PluginPrefs> plugin_prefs_; 2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)PepperFlashSettingsManager::Core::Core( 2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::WeakPtr<PepperFlashSettingsManager> manager, 2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::BrowserContext* browser_context) 2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : manager_(manager), 2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) state_(STATE_UNINITIALIZED), 2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) browser_context_path_(browser_context->GetPath()), 2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) plugin_prefs_(PluginPrefs::GetForProfile( 2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Profile::FromBrowserContext(browser_context))) { 2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)PepperFlashSettingsManager::Core::~Core() { 2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void PepperFlashSettingsManager::Core::Initialize() { 2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BrowserThread::PostTask(BrowserThread::IO, FROM_HERE, 2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Bind(&Core::InitializeOnIOThread, this)); 2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void PepperFlashSettingsManager::Core::Detach() { 2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // This call guarantees that one ref is retained until we get to the DETACHED 2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // state. This is important. Otherwise, if the ref count drops to zero on the 2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // UI thread (which posts a task to delete this object on the I/O thread) 2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // while the I/O thread doesn't know about it, methods on the I/O thread might 2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // increase the ref count again and cause double deletion. 2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BrowserThread::PostTask( 2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BrowserThread::IO, FROM_HERE, base::Bind(&Core::DetachOnIOThread, this)); 2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void PepperFlashSettingsManager::Core::DeauthorizeContentLicenses( 2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) uint32 request_id) { 2475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 2485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BrowserThread::PostTask( 2505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BrowserThread::IO, FROM_HERE, 2515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Bind(&Core::DeauthorizeContentLicensesOnIOThread, this, 2525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) request_id)); 2535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void PepperFlashSettingsManager::Core::GetPermissionSettings( 2565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) uint32 request_id, 2575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PP_Flash_BrowserOperations_SettingType setting_type) { 2585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 2595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BrowserThread::PostTask( 2615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BrowserThread::IO, FROM_HERE, 2625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Bind(&Core::GetPermissionSettingsOnIOThread, this, request_id, 2635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) setting_type)); 2645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void PepperFlashSettingsManager::Core::SetDefaultPermission( 2675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) uint32 request_id, 2685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PP_Flash_BrowserOperations_SettingType setting_type, 2695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PP_Flash_BrowserOperations_Permission permission, 2705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool clear_site_specific) { 2715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 2725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BrowserThread::PostTask( 2745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BrowserThread::IO, FROM_HERE, 2755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Bind(&Core::SetDefaultPermissionOnIOThread, this, request_id, 2765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) setting_type, permission, clear_site_specific)); 2775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void PepperFlashSettingsManager::Core::SetSitePermission( 2805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) uint32 request_id, 2815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PP_Flash_BrowserOperations_SettingType setting_type, 2825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const ppapi::FlashSiteSettings& sites) { 2835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 2845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BrowserThread::PostTask( 2865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BrowserThread::IO, FROM_HERE, 2875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Bind(&Core::SetSitePermissionOnIOThread, this, request_id, 2885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) setting_type, sites)); 2895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void PepperFlashSettingsManager::Core::GetSitesWithData(uint32 request_id) { 2925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 2935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BrowserThread::PostTask( 2955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BrowserThread::IO, FROM_HERE, 2965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Bind(&Core::GetSitesWithDataOnIOThread, this, request_id)); 2975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void PepperFlashSettingsManager::Core::ClearSiteData(uint32 request_id, 3005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& site, 3015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) uint64 flags, 3025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) uint64 max_age) { 3035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 3045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BrowserThread::PostTask( 3065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BrowserThread::IO, FROM_HERE, 3075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Bind(&Core::ClearSiteDataOnIOThread, this, request_id, 3085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) site, flags, max_age)); 3095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool PepperFlashSettingsManager::Core::OnMessageReceived( 3125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const IPC::Message& message) { 3135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IPC_BEGIN_MESSAGE_MAP(Core, message) 3145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IPC_MESSAGE_HANDLER(PpapiHostMsg_DeauthorizeContentLicensesResult, 3155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) OnDeauthorizeContentLicensesResult) 3165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IPC_MESSAGE_HANDLER(PpapiHostMsg_GetPermissionSettingsResult, 3175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) OnGetPermissionSettingsResult) 3185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IPC_MESSAGE_HANDLER(PpapiHostMsg_SetDefaultPermissionResult, 3195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) OnSetDefaultPermissionResult) 3205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IPC_MESSAGE_HANDLER(PpapiHostMsg_SetSitePermissionResult, 3215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) OnSetSitePermissionResult) 3225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IPC_MESSAGE_HANDLER(PpapiHostMsg_GetSitesWithDataResult, 3235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) OnGetSitesWithDataResult) 3245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IPC_MESSAGE_HANDLER(PpapiHostMsg_ClearSiteDataResult, 3255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) OnClearSiteDataResult) 3265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IPC_MESSAGE_UNHANDLED_ERROR() 3275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IPC_END_MESSAGE_MAP() 3285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return true; 3305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void PepperFlashSettingsManager::Core::OnChannelError() { 3335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 3345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (state_ == STATE_DETACHED) 3355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 3365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NotifyErrorFromIOThread(); 3385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void PepperFlashSettingsManager::Core::ConnectToChannel( 3415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool success, 3425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const IPC::ChannelHandle& handle) { 3435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 3445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (state_ == STATE_DETACHED) 3455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 3465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(state_ == STATE_UNINITIALIZED); 3485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(!channel_.get()); 3495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!success) { 3515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DLOG(ERROR) << "Couldn't open plugin channel"; 3525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NotifyErrorFromIOThread(); 3535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 3545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 356cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) channel_ = IPC::Channel::CreateClient(handle, this); 3575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!channel_->Connect()) { 3585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DLOG(ERROR) << "Couldn't connect to plugin"; 3595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NotifyErrorFromIOThread(); 3605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 3615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) state_ = STATE_INITIALIZED; 3645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<PendingRequest> temp_pending_requests; 3665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) temp_pending_requests.swap(pending_requests_); 3675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (std::vector<PendingRequest>::iterator iter = 3685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) temp_pending_requests.begin(); 3695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) iter != temp_pending_requests.end(); ++iter) { 3705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) switch (iter->type) { 3715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case INVALID_REQUEST_TYPE: 3725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NOTREACHED(); 3735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 3745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case DEAUTHORIZE_CONTENT_LICENSES: 3755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DeauthorizeContentLicensesOnIOThread(iter->id); 3765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 3775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case GET_PERMISSION_SETTINGS: 3785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetPermissionSettingsOnIOThread(iter->id, iter->setting_type); 3795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 3805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case SET_DEFAULT_PERMISSION: 3815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SetDefaultPermissionOnIOThread( 3825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) iter->id, iter->setting_type, iter->permission, 3835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) iter->clear_site_specific); 3845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 3855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case SET_SITE_PERMISSION: 3865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SetSitePermissionOnIOThread(iter->id, iter->setting_type, iter->sites); 3875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 3885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case GET_SITES_WITH_DATA: 3895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetSitesWithDataOnIOThread(iter->id); 3905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 3915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case CLEAR_SITE_DATA: 3925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ClearSiteDataOnIOThread(iter->id, iter->site, iter->flags, 3935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) iter->max_age); 3945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 3955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void PepperFlashSettingsManager::Core::InitializeOnIOThread() { 4005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 4015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK_EQ(STATE_UNINITIALIZED, state_); 4025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 403ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch content::WebPluginInfo plugin_info; 4045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!PepperFlashSettingsManager::IsPepperFlashInUse(plugin_prefs_.get(), 4055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) &plugin_info)) { 4065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NotifyErrorFromIOThread(); 4075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 4085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath profile_path = 4115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) browser_context_path_.Append(content::kPepperDataDirname); 4125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_WIN) 4135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) plugin_data_path_ = profile_path.Append(plugin_info.name); 4145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#else 4155d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) plugin_data_path_ = profile_path.Append(base::UTF16ToUTF8(plugin_info.name)); 4165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif 4175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) helper_ = content::PepperFlashSettingsHelper::Create(); 4195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::PepperFlashSettingsHelper::OpenChannelCallback callback = 4205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Bind(&Core::ConnectToChannel, this); 4215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) helper_->OpenChannelToBroker(plugin_info.path, callback); 4225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void PepperFlashSettingsManager::Core::DeauthorizeContentLicensesOnIOThread( 4255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) uint32 request_id) { 4265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 4275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK_NE(STATE_DETACHED, state_); 4285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (state_ == STATE_UNINITIALIZED) { 4305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PendingRequest request; 4315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) request.id = request_id; 4325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) request.type = DEAUTHORIZE_CONTENT_LICENSES; 4335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pending_requests_.push_back(request); 4345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 4355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pending_responses_.insert( 4385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::make_pair(request_id, DEAUTHORIZE_CONTENT_LICENSES)); 4395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (state_ == STATE_ERROR) { 4405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NotifyErrorFromIOThread(); 4415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 4425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 444c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#if defined(OS_CHROMEOS) 445c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) BrowserThread::PostBlockingPoolTask(FROM_HERE, 446c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::Bind(&Core::DeauthorizeContentLicensesOnBlockingPool, this, 447c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) request_id, browser_context_path_)); 448c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#else 449c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DeauthorizeContentLicensesInPlugin(request_id, true); 450c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#endif 451c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 452c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 453c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// TODO(raymes): This is temporary code to migrate ChromeOS devices to the new 454c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// scheme for generating device IDs. Delete this once we are sure most ChromeOS 455c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// devices have been migrated. 456c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void PepperFlashSettingsManager::Core::DeauthorizeContentLicensesOnBlockingPool( 457c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) uint32 request_id, 458c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const base::FilePath& profile_path) { 459c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // ChromeOS used to store the device ID in a file but this is no longer used. 460c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Wipe that file. 461c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const base::FilePath& device_id_path = 462c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) chrome::DeviceIDFetcher::GetLegacyDeviceIDPath(profile_path); 4637dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch bool success = base::DeleteFile(device_id_path, false); 464c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 465c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) BrowserThread::PostTask( 466c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) BrowserThread::IO, FROM_HERE, 467c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::Bind(&Core::DeauthorizeContentLicensesInPlugin, this, request_id, 468c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) success)); 469c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 470c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 471c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void PepperFlashSettingsManager::Core::DeauthorizeContentLicensesInPlugin( 472c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) uint32 request_id, 473c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) bool success) { 474c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 475c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (!success) { 476c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) NotifyErrorFromIOThread(); 477c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return; 478c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 4795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IPC::Message* msg = 4805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new PpapiMsg_DeauthorizeContentLicenses(request_id, plugin_data_path_); 4815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!channel_->Send(msg)) { 4825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DLOG(ERROR) << "Couldn't send DeauthorizeContentLicenses message"; 4835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // A failure notification for the current request will be sent since 4845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // |pending_responses_| has been updated. 4855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NotifyErrorFromIOThread(); 4865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void PepperFlashSettingsManager::Core::GetPermissionSettingsOnIOThread( 4905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) uint32 request_id, 4915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PP_Flash_BrowserOperations_SettingType setting_type) { 4925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 4935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK_NE(STATE_DETACHED, state_); 4945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (state_ == STATE_UNINITIALIZED) { 4965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PendingRequest request; 4975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) request.id = request_id; 4985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) request.type = GET_PERMISSION_SETTINGS; 4995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) request.setting_type = setting_type; 5005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pending_requests_.push_back(request); 5015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 5025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pending_responses_.insert( 5055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::make_pair(request_id, GET_PERMISSION_SETTINGS)); 5065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (state_ == STATE_ERROR) { 5075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NotifyErrorFromIOThread(); 5085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 5095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IPC::Message* msg = new PpapiMsg_GetPermissionSettings( 5125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) request_id, plugin_data_path_, setting_type); 5135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!channel_->Send(msg)) { 5145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DLOG(ERROR) << "Couldn't send GetPermissionSettings message"; 5155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // A failure notification for the current request will be sent since 5165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // |pending_responses_| has been updated. 5175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NotifyErrorFromIOThread(); 5185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void PepperFlashSettingsManager::Core::SetDefaultPermissionOnIOThread( 5225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) uint32 request_id, 5235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PP_Flash_BrowserOperations_SettingType setting_type, 5245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PP_Flash_BrowserOperations_Permission permission, 5255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool clear_site_specific) { 5265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 5275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK_NE(STATE_DETACHED, state_); 5285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (state_ == STATE_UNINITIALIZED) { 5305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PendingRequest request; 5315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) request.id = request_id; 5325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) request.type = SET_DEFAULT_PERMISSION; 5335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) request.setting_type = setting_type; 5345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) request.permission = permission; 5355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) request.clear_site_specific = clear_site_specific; 5365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pending_requests_.push_back(request); 5375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 5385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pending_responses_.insert(std::make_pair(request_id, SET_DEFAULT_PERMISSION)); 5415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (state_ == STATE_ERROR) { 5425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NotifyErrorFromIOThread(); 5435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 5445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IPC::Message* msg = new PpapiMsg_SetDefaultPermission( 5475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) request_id, plugin_data_path_, setting_type, permission, 5485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) clear_site_specific); 5495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!channel_->Send(msg)) { 5505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DLOG(ERROR) << "Couldn't send SetDefaultPermission message"; 5515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // A failure notification for the current request will be sent since 5525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // |pending_responses_| has been updated. 5535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NotifyErrorFromIOThread(); 5545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void PepperFlashSettingsManager::Core::SetSitePermissionOnIOThread( 5585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) uint32 request_id, 5595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PP_Flash_BrowserOperations_SettingType setting_type, 5605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const ppapi::FlashSiteSettings& sites) { 5615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 5625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK_NE(STATE_DETACHED, state_); 5635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (state_ == STATE_UNINITIALIZED) { 5655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pending_requests_.push_back(PendingRequest()); 5665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PendingRequest& request = pending_requests_.back(); 5675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) request.id = request_id; 5685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) request.type = SET_SITE_PERMISSION; 5695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) request.setting_type = setting_type; 5705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) request.sites = sites; 5715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 5725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pending_responses_.insert(std::make_pair(request_id, SET_SITE_PERMISSION)); 5755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (state_ == STATE_ERROR) { 5765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NotifyErrorFromIOThread(); 5775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 5785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IPC::Message* msg = new PpapiMsg_SetSitePermission( 5815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) request_id, plugin_data_path_, setting_type, sites); 5825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!channel_->Send(msg)) { 5835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DLOG(ERROR) << "Couldn't send SetSitePermission message"; 5845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // A failure notification for the current request will be sent since 5855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // |pending_responses_| has been updated. 5865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NotifyErrorFromIOThread(); 5875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 5885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void PepperFlashSettingsManager::Core::GetSitesWithDataOnIOThread( 5915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) uint32 request_id) { 5925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 5935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK_NE(STATE_DETACHED, state_); 5945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (state_ == STATE_UNINITIALIZED) { 5965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pending_requests_.push_back(PendingRequest()); 5975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PendingRequest& request = pending_requests_.back(); 5985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) request.id = request_id; 5995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) request.type = GET_SITES_WITH_DATA; 6005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 6015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 6025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pending_responses_.insert(std::make_pair(request_id, GET_SITES_WITH_DATA)); 6045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (state_ == STATE_ERROR) { 6055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NotifyErrorFromIOThread(); 6065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 6075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 6085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IPC::Message* msg = new PpapiMsg_GetSitesWithData( 6105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) request_id, plugin_data_path_); 6115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!channel_->Send(msg)) { 6125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DLOG(ERROR) << "Couldn't send GetSitesWithData message"; 6135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // A failure notification for the current request will be sent since 6145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // |pending_responses_| has been updated. 6155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NotifyErrorFromIOThread(); 6165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 6175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void PepperFlashSettingsManager::Core::ClearSiteDataOnIOThread( 6205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) uint32 request_id, 6215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& site, 6225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) uint64 flags, 6235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) uint64 max_age) { 6245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 6255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK_NE(STATE_DETACHED, state_); 6265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (state_ == STATE_UNINITIALIZED) { 6285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pending_requests_.push_back(PendingRequest()); 6295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PendingRequest& request = pending_requests_.back(); 6305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) request.id = request_id; 6315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) request.type = CLEAR_SITE_DATA; 6325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) request.site = site; 6335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) request.flags = flags; 6345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) request.max_age = max_age; 6355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 6365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 6375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pending_responses_.insert(std::make_pair(request_id, CLEAR_SITE_DATA)); 6395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (state_ == STATE_ERROR) { 6405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NotifyErrorFromIOThread(); 6415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 6425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 6435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IPC::Message* msg = new PpapiMsg_ClearSiteData( 6455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) request_id, plugin_data_path_, site, flags, max_age); 6465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!channel_->Send(msg)) { 6475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DLOG(ERROR) << "Couldn't send ClearSiteData message"; 6485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // A failure notification for the current request will be sent since 6495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // |pending_responses_| has been updated. 6505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NotifyErrorFromIOThread(); 6515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 6525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void PepperFlashSettingsManager::Core::DetachOnIOThread() { 6555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) state_ = STATE_DETACHED; 6565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void PepperFlashSettingsManager::Core::NotifyErrorFromIOThread() { 6595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 6605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (state_ == STATE_DETACHED) 6615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 6625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) state_ = STATE_ERROR; 6645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::vector<std::pair<uint32, RequestType> > notifications; 6655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (std::vector<PendingRequest>::iterator iter = pending_requests_.begin(); 6665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) iter != pending_requests_.end(); ++iter) { 6675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) notifications.push_back(std::make_pair(iter->id, iter->type)); 6685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 6695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pending_requests_.clear(); 6705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) notifications.insert(notifications.end(), pending_responses_.begin(), 6715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pending_responses_.end()); 6725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pending_responses_.clear(); 6735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BrowserThread::PostTask( 6755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BrowserThread::UI, FROM_HERE, 6765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Bind(&Core::NotifyError, this, notifications)); 6775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void 6805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)PepperFlashSettingsManager::Core::NotifyDeauthorizeContentLicensesCompleted( 6815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) uint32 request_id, 6825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool success) { 6835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 6845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (manager_.get()) { 6865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) manager_->client_->OnDeauthorizeContentLicensesCompleted( 6875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) request_id, success); 6885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 6895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void PepperFlashSettingsManager::Core::NotifyGetPermissionSettingsCompleted( 6925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) uint32 request_id, 6935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool success, 6945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PP_Flash_BrowserOperations_Permission default_permission, 6955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const ppapi::FlashSiteSettings& sites) { 6965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 6975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (manager_.get()) { 6995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) manager_->client_->OnGetPermissionSettingsCompleted( 7005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) request_id, success, default_permission, sites); 7015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 7025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 7035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void PepperFlashSettingsManager::Core::NotifySetDefaultPermissionCompleted( 7055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) uint32 request_id, 7065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool success) { 7075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 7085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (manager_.get()) { 7105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) manager_->client_->OnSetDefaultPermissionCompleted( 7115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) request_id, success); 7125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 7135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 7145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void PepperFlashSettingsManager::Core::NotifySetSitePermissionCompleted( 7165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) uint32 request_id, 7175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool success) { 7185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 7195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (manager_.get()) { 7215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) manager_->client_->OnSetSitePermissionCompleted( 7225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) request_id, success); 7235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 7245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 7255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void PepperFlashSettingsManager::Core::NotifyGetSitesWithDataCompleted( 7275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) uint32 request_id, 7285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::vector<std::string>& sites) { 7295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 7305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (manager_.get()) { 7325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) manager_->client_->OnGetSitesWithDataCompleted( 7335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) request_id, sites); 7345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 7355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 7365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void PepperFlashSettingsManager::Core::NotifyClearSiteDataCompleted( 7385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) uint32 request_id, 7395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool success) { 7405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 7415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (manager_.get()) 7435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) manager_->client_->OnClearSiteDataCompleted(request_id, success); 7445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 7455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void PepperFlashSettingsManager::Core::NotifyError( 7475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::vector<std::pair<uint32, RequestType> >& notifications) { 7485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 7495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) scoped_refptr<Core> protector(this); 7515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (std::vector<std::pair<uint32, RequestType> >::const_iterator iter = 7525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) notifications.begin(); iter != notifications.end(); ++iter) { 7535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Check |manager_| for each iteration in case it is destroyed in one of 7545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // the callbacks. 7555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!manager_.get()) 7565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 7575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) switch (iter->second) { 7595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case INVALID_REQUEST_TYPE: 7605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NOTREACHED(); 7615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 7625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case DEAUTHORIZE_CONTENT_LICENSES: 7635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) manager_->client_->OnDeauthorizeContentLicensesCompleted( 7645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) iter->first, false); 7655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 7665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case GET_PERMISSION_SETTINGS: 7675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) manager_->client_->OnGetPermissionSettingsCompleted( 7685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) iter->first, false, PP_FLASH_BROWSEROPERATIONS_PERMISSION_DEFAULT, 7695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ppapi::FlashSiteSettings()); 7705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 7715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case SET_DEFAULT_PERMISSION: 7725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) manager_->client_->OnSetDefaultPermissionCompleted( 7735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) iter->first, false); 7745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 7755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case SET_SITE_PERMISSION: 7765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) manager_->client_->OnSetSitePermissionCompleted(iter->first, false); 7775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 7785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case GET_SITES_WITH_DATA: 7795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) manager_->client_->OnGetSitesWithDataCompleted( 7805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) iter->first, std::vector<std::string>()); 7815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 7825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case CLEAR_SITE_DATA: 7835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) manager_->client_->OnClearSiteDataCompleted(iter->first, false); 7845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 7855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 7865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 7875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (manager_.get()) 7895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) manager_->OnError(this); 7905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 7915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void PepperFlashSettingsManager::Core::OnDeauthorizeContentLicensesResult( 7935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) uint32 request_id, 7945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool success) { 7955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 7965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (state_ == STATE_DETACHED) 7975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 7985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DLOG_IF(ERROR, !success) << "DeauthorizeContentLicenses returned error"; 8005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::map<uint32, RequestType>::iterator iter = 8025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pending_responses_.find(request_id); 8035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (iter == pending_responses_.end()) 8045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 8055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK_EQ(iter->second, DEAUTHORIZE_CONTENT_LICENSES); 8075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pending_responses_.erase(iter); 8095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BrowserThread::PostTask( 8105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BrowserThread::UI, FROM_HERE, 8115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Bind(&Core::NotifyDeauthorizeContentLicensesCompleted, this, 8125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) request_id, success)); 8135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 8145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void PepperFlashSettingsManager::Core::OnGetPermissionSettingsResult( 8165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) uint32 request_id, 8175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool success, 8185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PP_Flash_BrowserOperations_Permission default_permission, 8195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const ppapi::FlashSiteSettings& sites) { 8205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 8215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (state_ == STATE_DETACHED) 8225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 8235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DLOG_IF(ERROR, !success) << "GetPermissionSettings returned error"; 8255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::map<uint32, RequestType>::iterator iter = 8275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pending_responses_.find(request_id); 8285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (iter == pending_responses_.end()) 8295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 8305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK_EQ(iter->second, GET_PERMISSION_SETTINGS); 8325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pending_responses_.erase(iter); 8345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BrowserThread::PostTask( 8355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BrowserThread::UI, FROM_HERE, 8365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Bind(&Core::NotifyGetPermissionSettingsCompleted, this, 8375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) request_id, success, default_permission, sites)); 8385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 8395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void PepperFlashSettingsManager::Core::OnSetDefaultPermissionResult( 8415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) uint32 request_id, 8425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool success) { 8435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 8445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (state_ == STATE_DETACHED) 8455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 8465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DLOG_IF(ERROR, !success) << "SetDefaultPermission returned error"; 8485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::map<uint32, RequestType>::iterator iter = 8505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pending_responses_.find(request_id); 8515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (iter == pending_responses_.end()) 8525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 8535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK_EQ(iter->second, SET_DEFAULT_PERMISSION); 8555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pending_responses_.erase(iter); 8575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BrowserThread::PostTask( 8585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BrowserThread::UI, FROM_HERE, 8595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Bind(&Core::NotifySetDefaultPermissionCompleted, this, 8605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) request_id, success)); 8615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 8625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void PepperFlashSettingsManager::Core::OnSetSitePermissionResult( 8645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) uint32 request_id, 8655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool success) { 8665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 8675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (state_ == STATE_DETACHED) 8685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 8695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DLOG_IF(ERROR, !success) << "SetSitePermission returned error"; 8715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::map<uint32, RequestType>::iterator iter = 8735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pending_responses_.find(request_id); 8745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (iter == pending_responses_.end()) 8755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 8765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK_EQ(iter->second, SET_SITE_PERMISSION); 8785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pending_responses_.erase(iter); 8805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BrowserThread::PostTask( 8815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BrowserThread::UI, FROM_HERE, 8825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Bind(&Core::NotifySetSitePermissionCompleted, this, request_id, 8835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) success)); 8845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 8855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void PepperFlashSettingsManager::Core::OnGetSitesWithDataResult( 8875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) uint32 request_id, 8885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::vector<std::string>& sites) { 8895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 8905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (state_ == STATE_DETACHED) 8915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 8925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::map<uint32, RequestType>::iterator iter = 8945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pending_responses_.find(request_id); 8955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (iter == pending_responses_.end()) 8965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 8975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK_EQ(iter->second, GET_SITES_WITH_DATA); 8995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pending_responses_.erase(iter); 9015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BrowserThread::PostTask( 9025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BrowserThread::UI, FROM_HERE, 9035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Bind(&Core::NotifyGetSitesWithDataCompleted, this, request_id, 9045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sites)); 9055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 9065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void PepperFlashSettingsManager::Core::OnClearSiteDataResult( 9085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) uint32 request_id, 9095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool success) { 9105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 9115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (state_ == STATE_DETACHED) 9125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 9135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DLOG_IF(ERROR, !success) << "ClearSiteData returned error"; 9155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::map<uint32, RequestType>::iterator iter = 9175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pending_responses_.find(request_id); 9185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (iter == pending_responses_.end()) 9195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 9205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK_EQ(iter->second, CLEAR_SITE_DATA); 9225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pending_responses_.erase(iter); 9245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BrowserThread::PostTask( 9255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BrowserThread::UI, FROM_HERE, 9265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Bind(&Core::NotifyClearSiteDataCompleted, this, request_id, 9275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) success)); 9285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 9295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)PepperFlashSettingsManager::PepperFlashSettingsManager( 9315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Client* client, 9325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::BrowserContext* browser_context) 9334e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) : client_(client), 9345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) browser_context_(browser_context), 9354e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) next_request_id_(1), 9364e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) weak_ptr_factory_(this) { 9375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(client); 9385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(browser_context); 9395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 9405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)PepperFlashSettingsManager::~PepperFlashSettingsManager() { 9425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (core_.get()) 9435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) core_->Detach(); 9445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 9455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// static 9475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool PepperFlashSettingsManager::IsPepperFlashInUse( 9485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PluginPrefs* plugin_prefs, 949ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch content::WebPluginInfo* plugin_info) { 9505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!plugin_prefs) 9515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 9525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::PluginService* plugin_service = 9545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::PluginService::GetInstance(); 955ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch std::vector<content::WebPluginInfo> plugins; 9565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) plugin_service->GetPluginInfoArray( 957ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch GURL(), content::kFlashPluginSwfMimeType, false, &plugins, NULL); 9585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 959ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch for (std::vector<content::WebPluginInfo>::iterator iter = plugins.begin(); 9605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) iter != plugins.end(); ++iter) { 961ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch if (iter->is_pepper_plugin() && plugin_prefs->IsPluginEnabled(*iter)) { 9625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (plugin_info) 9635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *plugin_info = *iter; 9645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return true; 9655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 9665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 9675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 9685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 9695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// static 9717dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochvoid PepperFlashSettingsManager::RegisterProfilePrefs( 972c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) user_prefs::PrefRegistrySyncable* registry) { 973c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) registry->RegisterBooleanPref( 974c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) prefs::kDeauthorizeContentLicenses, 975c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) false, 976c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF); 9772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 978c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) registry->RegisterBooleanPref( 979c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) prefs::kPepperFlashSettingsEnabled, 980c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) true, 981c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF); 9825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 9835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 984c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)uint32 PepperFlashSettingsManager::DeauthorizeContentLicenses( 985c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) PrefService* prefs) { 9865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 9875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 988c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Clear the device ID salt which has the effect of regenerating a device 989c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // ID. Since this happens synchronously (and on the UI thread), we don't have 990c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // to add it to a pending request. 991c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) prefs->ClearPref(prefs::kDRMSalt); 992c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 9935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EnsureCoreExists(); 9945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) uint32 id = GetNextRequestId(); 9955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) core_->DeauthorizeContentLicenses(id); 9965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return id; 9975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 9985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)uint32 PepperFlashSettingsManager::GetPermissionSettings( 10005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PP_Flash_BrowserOperations_SettingType setting_type) { 10015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 10025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EnsureCoreExists(); 10045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) uint32 id = GetNextRequestId(); 10055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) core_->GetPermissionSettings(id, setting_type); 10065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return id; 10075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 10085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)uint32 PepperFlashSettingsManager::SetDefaultPermission( 10105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PP_Flash_BrowserOperations_SettingType setting_type, 10115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PP_Flash_BrowserOperations_Permission permission, 10125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool clear_site_specific) { 10135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 10145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EnsureCoreExists(); 10165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) uint32 id = GetNextRequestId(); 10175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) core_->SetDefaultPermission(id, setting_type, permission, 10185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) clear_site_specific); 10195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return id; 10205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 10215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)uint32 PepperFlashSettingsManager::SetSitePermission( 10235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PP_Flash_BrowserOperations_SettingType setting_type, 10245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const ppapi::FlashSiteSettings& sites) { 10255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 10265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EnsureCoreExists(); 10285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) uint32 id = GetNextRequestId(); 10295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) core_->SetSitePermission(id, setting_type, sites); 10305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return id; 10315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 10325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)uint32 PepperFlashSettingsManager::GetSitesWithData() { 10345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 10355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EnsureCoreExists(); 10375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) uint32 id = GetNextRequestId(); 10385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) core_->GetSitesWithData(id); 10395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return id; 10405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 10415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)uint32 PepperFlashSettingsManager::ClearSiteData(const std::string& site, 10435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) uint64 flags, 10445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) uint64 max_age) { 10455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 10465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EnsureCoreExists(); 10485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) uint32 id = GetNextRequestId(); 10495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) core_->ClearSiteData(id, site, flags, max_age); 10505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return id; 10515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 10525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)uint32 PepperFlashSettingsManager::GetNextRequestId() { 10545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return next_request_id_++; 10555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 10565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void PepperFlashSettingsManager::EnsureCoreExists() { 10585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!core_.get()) { 10595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) core_ = new Core(weak_ptr_factory_.GetWeakPtr(), browser_context_); 10605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) core_->Initialize(); 10615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 10625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 10635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void PepperFlashSettingsManager::OnError(Core* core) { 10655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DCHECK(core); 10665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (core != core_.get()) 10675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 10685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) core_->Detach(); 10705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) core_ = NULL; 10715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1072