Commit 951ef0bd authored by bauerb@chromium.org's avatar bauerb@chromium.org

Add GetSitesWithData and FreeSiteList methods to PPP_Flash_BrowserOperations...

Add GetSitesWithData and FreeSiteList methods to PPP_Flash_BrowserOperations interface and hook them up in PepperFlashSettingsManager.


BUG=132409
TEST=none


Review URL: https://chromiumcodereview.appspot.com/10825018

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@148839 0039d316-1c4b-4281-b951-d872f2087c98
parent 19d32935
...@@ -52,6 +52,11 @@ class PepperFlashSettingsManager::Core ...@@ -52,6 +52,11 @@ class PepperFlashSettingsManager::Core
void SetSitePermission(uint32 request_id, void SetSitePermission(uint32 request_id,
PP_Flash_BrowserOperations_SettingType setting_type, PP_Flash_BrowserOperations_SettingType setting_type,
const ppapi::FlashSiteSettings& sites); const ppapi::FlashSiteSettings& sites);
void GetSitesWithData(uint32 request_id);
void ClearSiteData(uint32 request_id,
const std::string& site,
uint64 flags,
uint64 max_age);
// IPC::Listener implementation. // IPC::Listener implementation.
virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE; virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE;
...@@ -66,7 +71,9 @@ class PepperFlashSettingsManager::Core ...@@ -66,7 +71,9 @@ class PepperFlashSettingsManager::Core
DEAUTHORIZE_CONTENT_LICENSES, DEAUTHORIZE_CONTENT_LICENSES,
GET_PERMISSION_SETTINGS, GET_PERMISSION_SETTINGS,
SET_DEFAULT_PERMISSION, SET_DEFAULT_PERMISSION,
SET_SITE_PERMISSION SET_SITE_PERMISSION,
GET_SITES_WITH_DATA,
CLEAR_SITE_DATA,
}; };
struct PendingRequest { struct PendingRequest {
...@@ -91,6 +98,11 @@ class PepperFlashSettingsManager::Core ...@@ -91,6 +98,11 @@ class PepperFlashSettingsManager::Core
// Used by SET_SITE_PERMISSION. // Used by SET_SITE_PERMISSION.
ppapi::FlashSiteSettings sites; ppapi::FlashSiteSettings sites;
// Used by CLEAR_SITE_DATA
std::string site;
uint64 flags;
uint64 max_age;
}; };
virtual ~Core(); virtual ~Core();
...@@ -111,6 +123,11 @@ class PepperFlashSettingsManager::Core ...@@ -111,6 +123,11 @@ class PepperFlashSettingsManager::Core
uint32 request_id, uint32 request_id,
PP_Flash_BrowserOperations_SettingType setting_type, PP_Flash_BrowserOperations_SettingType setting_type,
const ppapi::FlashSiteSettings& sites); const ppapi::FlashSiteSettings& sites);
void GetSitesWithDataOnIOThread(uint32 request_id);
void ClearSiteDataOnIOThread(uint32 request_id,
const std::string& site,
uint64 flags,
uint64 max_age);
void DetachOnIOThread(); void DetachOnIOThread();
void NotifyErrorFromIOThread(); void NotifyErrorFromIOThread();
...@@ -124,6 +141,9 @@ class PepperFlashSettingsManager::Core ...@@ -124,6 +141,9 @@ class PepperFlashSettingsManager::Core
const ppapi::FlashSiteSettings& sites); const ppapi::FlashSiteSettings& sites);
void NotifySetDefaultPermissionCompleted(uint32 request_id, bool success); void NotifySetDefaultPermissionCompleted(uint32 request_id, bool success);
void NotifySetSitePermissionCompleted(uint32 request_id, bool success); void NotifySetSitePermissionCompleted(uint32 request_id, bool success);
void NotifyGetSitesWithDataCompleted(uint32 request_id,
const std::vector<std::string>& sites);
void NotifyClearSiteDataCompleted(uint32 request_id, bool success);
void NotifyError( void NotifyError(
const std::vector<std::pair<uint32, RequestType> >& notifications); const std::vector<std::pair<uint32, RequestType> >& notifications);
...@@ -137,6 +157,9 @@ class PepperFlashSettingsManager::Core ...@@ -137,6 +157,9 @@ class PepperFlashSettingsManager::Core
const ppapi::FlashSiteSettings& sites); const ppapi::FlashSiteSettings& sites);
void OnSetDefaultPermissionResult(uint32 request_id, bool success); void OnSetDefaultPermissionResult(uint32 request_id, bool success);
void OnSetSitePermissionResult(uint32 request_id, bool success); void OnSetSitePermissionResult(uint32 request_id, bool success);
void OnGetSitesWithDataResult(uint32 request_id,
const std::vector<std::string>& sites);
void OnClearSiteDataResult(uint32 request_id, bool success);
// Used only on the UI thread. // Used only on the UI thread.
PepperFlashSettingsManager* manager_; PepperFlashSettingsManager* manager_;
...@@ -251,6 +274,26 @@ void PepperFlashSettingsManager::Core::SetSitePermission( ...@@ -251,6 +274,26 @@ void PepperFlashSettingsManager::Core::SetSitePermission(
setting_type, sites)); setting_type, sites));
} }
void PepperFlashSettingsManager::Core::GetSitesWithData(uint32 request_id) {
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
BrowserThread::PostTask(
BrowserThread::IO, FROM_HERE,
base::Bind(&Core::GetSitesWithDataOnIOThread, this, request_id));
}
void PepperFlashSettingsManager::Core::ClearSiteData(uint32 request_id,
const std::string& site,
uint64 flags,
uint64 max_age) {
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
BrowserThread::PostTask(
BrowserThread::IO, FROM_HERE,
base::Bind(&Core::ClearSiteDataOnIOThread, this, request_id,
site, flags, max_age));
}
bool PepperFlashSettingsManager::Core::OnMessageReceived( bool PepperFlashSettingsManager::Core::OnMessageReceived(
const IPC::Message& message) { const IPC::Message& message) {
IPC_BEGIN_MESSAGE_MAP(Core, message) IPC_BEGIN_MESSAGE_MAP(Core, message)
...@@ -262,6 +305,10 @@ bool PepperFlashSettingsManager::Core::OnMessageReceived( ...@@ -262,6 +305,10 @@ bool PepperFlashSettingsManager::Core::OnMessageReceived(
OnSetDefaultPermissionResult) OnSetDefaultPermissionResult)
IPC_MESSAGE_HANDLER(PpapiHostMsg_SetSitePermissionResult, IPC_MESSAGE_HANDLER(PpapiHostMsg_SetSitePermissionResult,
OnSetSitePermissionResult) OnSetSitePermissionResult)
IPC_MESSAGE_HANDLER(PpapiHostMsg_GetSitesWithDataResult,
OnGetSitesWithDataResult)
IPC_MESSAGE_HANDLER(PpapiHostMsg_ClearSiteDataResult,
OnClearSiteDataResult)
IPC_MESSAGE_UNHANDLED_ERROR() IPC_MESSAGE_UNHANDLED_ERROR()
IPC_END_MESSAGE_MAP() IPC_END_MESSAGE_MAP()
...@@ -307,6 +354,9 @@ void PepperFlashSettingsManager::Core::ConnectToChannel( ...@@ -307,6 +354,9 @@ void PepperFlashSettingsManager::Core::ConnectToChannel(
temp_pending_requests.begin(); temp_pending_requests.begin();
iter != temp_pending_requests.end(); ++iter) { iter != temp_pending_requests.end(); ++iter) {
switch (iter->type) { switch (iter->type) {
case INVALID_REQUEST_TYPE:
NOTREACHED();
break;
case DEAUTHORIZE_CONTENT_LICENSES: case DEAUTHORIZE_CONTENT_LICENSES:
DeauthorizeContentLicensesOnIOThread(iter->id); DeauthorizeContentLicensesOnIOThread(iter->id);
break; break;
...@@ -321,8 +371,12 @@ void PepperFlashSettingsManager::Core::ConnectToChannel( ...@@ -321,8 +371,12 @@ void PepperFlashSettingsManager::Core::ConnectToChannel(
case SET_SITE_PERMISSION: case SET_SITE_PERMISSION:
SetSitePermissionOnIOThread(iter->id, iter->setting_type, iter->sites); SetSitePermissionOnIOThread(iter->id, iter->setting_type, iter->sites);
break; break;
default: case GET_SITES_WITH_DATA:
NOTREACHED(); GetSitesWithDataOnIOThread(iter->id);
break;
case CLEAR_SITE_DATA:
ClearSiteDataOnIOThread(iter->id, iter->site, iter->flags,
iter->max_age);
break; break;
} }
} }
...@@ -471,6 +525,62 @@ void PepperFlashSettingsManager::Core::SetSitePermissionOnIOThread( ...@@ -471,6 +525,62 @@ void PepperFlashSettingsManager::Core::SetSitePermissionOnIOThread(
} }
} }
void PepperFlashSettingsManager::Core::GetSitesWithDataOnIOThread(
uint32 request_id) {
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
if (detached_)
return;
if (!initialized_) {
pending_requests_.push_back(PendingRequest());
PendingRequest& request = pending_requests_.back();
request.id = request_id;
request.type = GET_SITES_WITH_DATA;
return;
}
pending_responses_.insert(std::make_pair(request_id, GET_SITES_WITH_DATA));
IPC::Message* msg = new PpapiMsg_GetSitesWithData(
request_id, plugin_data_path_);
if (!channel_->Send(msg)) {
DLOG(ERROR) << "Couldn't send GetSitesWithData message";
// A failure notification for the current request will be sent since
// |pending_responses_| has been updated.
NotifyErrorFromIOThread();
}
}
void PepperFlashSettingsManager::Core::ClearSiteDataOnIOThread(
uint32 request_id,
const std::string& site,
uint64 flags,
uint64 max_age) {
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
if (detached_)
return;
if (!initialized_) {
pending_requests_.push_back(PendingRequest());
PendingRequest& request = pending_requests_.back();
request.id = request_id;
request.type = CLEAR_SITE_DATA;
request.site = site;
request.flags = flags;
request.max_age = max_age;
return;
}
pending_responses_.insert(std::make_pair(request_id, CLEAR_SITE_DATA));
IPC::Message* msg = new PpapiMsg_ClearSiteData(
request_id, plugin_data_path_, site, flags, max_age);
if (!channel_->Send(msg)) {
DLOG(ERROR) << "Couldn't send ClearSiteData message";
// A failure notification for the current request will be sent since
// |pending_responses_| has been updated.
NotifyErrorFromIOThread();
}
}
void PepperFlashSettingsManager::Core::DetachOnIOThread() { void PepperFlashSettingsManager::Core::DetachOnIOThread() {
detached_ = true; detached_ = true;
} }
...@@ -542,6 +652,26 @@ void PepperFlashSettingsManager::Core::NotifySetSitePermissionCompleted( ...@@ -542,6 +652,26 @@ void PepperFlashSettingsManager::Core::NotifySetSitePermissionCompleted(
} }
} }
void PepperFlashSettingsManager::Core::NotifyGetSitesWithDataCompleted(
uint32 request_id,
const std::vector<std::string>& sites) {
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
if (manager_) {
manager_->client_->OnGetSitesWithDataCompleted(
request_id, sites);
}
}
void PepperFlashSettingsManager::Core::NotifyClearSiteDataCompleted(
uint32 request_id,
bool success) {
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
if (manager_)
manager_->client_->OnClearSiteDataCompleted(request_id, success);
}
void PepperFlashSettingsManager::Core::NotifyError( void PepperFlashSettingsManager::Core::NotifyError(
const std::vector<std::pair<uint32, RequestType> >& notifications) { const std::vector<std::pair<uint32, RequestType> >& notifications) {
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
...@@ -551,28 +681,36 @@ void PepperFlashSettingsManager::Core::NotifyError( ...@@ -551,28 +681,36 @@ void PepperFlashSettingsManager::Core::NotifyError(
notifications.begin(); iter != notifications.end(); ++iter) { notifications.begin(); iter != notifications.end(); ++iter) {
// Check |manager_| for each iteration in case Detach() happens in one of // Check |manager_| for each iteration in case Detach() happens in one of
// the callbacks. // the callbacks.
if (manager_) { if (!manager_)
switch (iter->second) { return;
case DEAUTHORIZE_CONTENT_LICENSES:
manager_->client_->OnDeauthorizeContentLicensesCompleted( switch (iter->second) {
iter->first, false); case INVALID_REQUEST_TYPE:
break; NOTREACHED();
case GET_PERMISSION_SETTINGS: break;
manager_->client_->OnGetPermissionSettingsCompleted( case DEAUTHORIZE_CONTENT_LICENSES:
iter->first, false, PP_FLASH_BROWSEROPERATIONS_PERMISSION_DEFAULT, manager_->client_->OnDeauthorizeContentLicensesCompleted(
ppapi::FlashSiteSettings()); iter->first, false);
break; break;
case SET_DEFAULT_PERMISSION: case GET_PERMISSION_SETTINGS:
manager_->client_->OnSetDefaultPermissionCompleted( manager_->client_->OnGetPermissionSettingsCompleted(
iter->first, false); iter->first, false, PP_FLASH_BROWSEROPERATIONS_PERMISSION_DEFAULT,
break; ppapi::FlashSiteSettings());
case SET_SITE_PERMISSION: break;
manager_->client_->OnSetSitePermissionCompleted(iter->first, false); case SET_DEFAULT_PERMISSION:
break; manager_->client_->OnSetDefaultPermissionCompleted(
default: iter->first, false);
NOTREACHED(); break;
break; case SET_SITE_PERMISSION:
} manager_->client_->OnSetSitePermissionCompleted(iter->first, false);
break;
case GET_SITES_WITH_DATA:
manager_->client_->OnGetSitesWithDataCompleted(
iter->first, std::vector<std::string>());
break;
case CLEAR_SITE_DATA:
manager_->client_->OnClearSiteDataCompleted(iter->first, false);
break;
} }
} }
...@@ -591,15 +729,16 @@ void PepperFlashSettingsManager::Core::OnDeauthorizeContentLicensesResult( ...@@ -591,15 +729,16 @@ void PepperFlashSettingsManager::Core::OnDeauthorizeContentLicensesResult(
std::map<uint32, RequestType>::iterator iter = std::map<uint32, RequestType>::iterator iter =
pending_responses_.find(request_id); pending_responses_.find(request_id);
if (iter != pending_responses_.end()) { if (iter == pending_responses_.end())
DCHECK_EQ(iter->second, DEAUTHORIZE_CONTENT_LICENSES); return;
pending_responses_.erase(iter); DCHECK_EQ(iter->second, DEAUTHORIZE_CONTENT_LICENSES);
BrowserThread::PostTask(
BrowserThread::UI, FROM_HERE, pending_responses_.erase(iter);
base::Bind(&Core::NotifyDeauthorizeContentLicensesCompleted, this, BrowserThread::PostTask(
request_id, success)); BrowserThread::UI, FROM_HERE,
} base::Bind(&Core::NotifyDeauthorizeContentLicensesCompleted, this,
request_id, success));
} }
void PepperFlashSettingsManager::Core::OnGetPermissionSettingsResult( void PepperFlashSettingsManager::Core::OnGetPermissionSettingsResult(
...@@ -615,15 +754,16 @@ void PepperFlashSettingsManager::Core::OnGetPermissionSettingsResult( ...@@ -615,15 +754,16 @@ void PepperFlashSettingsManager::Core::OnGetPermissionSettingsResult(
std::map<uint32, RequestType>::iterator iter = std::map<uint32, RequestType>::iterator iter =
pending_responses_.find(request_id); pending_responses_.find(request_id);
if (iter != pending_responses_.end()) { if (iter == pending_responses_.end())
DCHECK_EQ(iter->second, GET_PERMISSION_SETTINGS); return;
pending_responses_.erase(iter); DCHECK_EQ(iter->second, GET_PERMISSION_SETTINGS);
BrowserThread::PostTask(
BrowserThread::UI, FROM_HERE, pending_responses_.erase(iter);
base::Bind(&Core::NotifyGetPermissionSettingsCompleted, this, BrowserThread::PostTask(
request_id, success, default_permission, sites)); BrowserThread::UI, FROM_HERE,
} base::Bind(&Core::NotifyGetPermissionSettingsCompleted, this,
request_id, success, default_permission, sites));
} }
void PepperFlashSettingsManager::Core::OnSetDefaultPermissionResult( void PepperFlashSettingsManager::Core::OnSetDefaultPermissionResult(
...@@ -637,15 +777,16 @@ void PepperFlashSettingsManager::Core::OnSetDefaultPermissionResult( ...@@ -637,15 +777,16 @@ void PepperFlashSettingsManager::Core::OnSetDefaultPermissionResult(
std::map<uint32, RequestType>::iterator iter = std::map<uint32, RequestType>::iterator iter =
pending_responses_.find(request_id); pending_responses_.find(request_id);
if (iter != pending_responses_.end()) { if (iter == pending_responses_.end())
DCHECK_EQ(iter->second, SET_DEFAULT_PERMISSION); return;
pending_responses_.erase(iter); DCHECK_EQ(iter->second, SET_DEFAULT_PERMISSION);
BrowserThread::PostTask(
BrowserThread::UI, FROM_HERE, pending_responses_.erase(iter);
base::Bind(&Core::NotifySetDefaultPermissionCompleted, this, BrowserThread::PostTask(
request_id, success)); BrowserThread::UI, FROM_HERE,
} base::Bind(&Core::NotifySetDefaultPermissionCompleted, this,
request_id, success));
} }
void PepperFlashSettingsManager::Core::OnSetSitePermissionResult( void PepperFlashSettingsManager::Core::OnSetSitePermissionResult(
...@@ -659,15 +800,60 @@ void PepperFlashSettingsManager::Core::OnSetSitePermissionResult( ...@@ -659,15 +800,60 @@ void PepperFlashSettingsManager::Core::OnSetSitePermissionResult(
std::map<uint32, RequestType>::iterator iter = std::map<uint32, RequestType>::iterator iter =
pending_responses_.find(request_id); pending_responses_.find(request_id);
if (iter != pending_responses_.end()) { if (iter == pending_responses_.end())
DCHECK_EQ(iter->second, SET_SITE_PERMISSION); return;
pending_responses_.erase(iter); DCHECK_EQ(iter->second, SET_SITE_PERMISSION);
BrowserThread::PostTask(
BrowserThread::UI, FROM_HERE, pending_responses_.erase(iter);
base::Bind(&Core::NotifySetSitePermissionCompleted, this, request_id, BrowserThread::PostTask(
success)); BrowserThread::UI, FROM_HERE,
} base::Bind(&Core::NotifySetSitePermissionCompleted, this, request_id,
success));
}
void PepperFlashSettingsManager::Core::OnGetSitesWithDataResult(
uint32 request_id,
const std::vector<std::string>& sites) {
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
if (detached_)
return;
std::map<uint32, RequestType>::iterator iter =
pending_responses_.find(request_id);
if (iter == pending_responses_.end())
return;
DCHECK_EQ(iter->second, GET_SITES_WITH_DATA);
pending_responses_.erase(iter);
BrowserThread::PostTask(
BrowserThread::UI, FROM_HERE,
base::Bind(&Core::NotifyGetSitesWithDataCompleted, this, request_id,
sites));
}
void PepperFlashSettingsManager::Core::OnClearSiteDataResult(
uint32 request_id,
bool success) {
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
if (detached_)
return;
DLOG_IF(ERROR, !success) << "ClearSiteData returned error";
std::map<uint32, RequestType>::iterator iter =
pending_responses_.find(request_id);
if (iter == pending_responses_.end())
return;
DCHECK_EQ(iter->second, CLEAR_SITE_DATA);
pending_responses_.erase(iter);
BrowserThread::PostTask(
BrowserThread::UI, FROM_HERE,
base::Bind(&Core::NotifyClearSiteDataCompleted, this, request_id,
success));
} }
PepperFlashSettingsManager::PepperFlashSettingsManager( PepperFlashSettingsManager::PepperFlashSettingsManager(
...@@ -681,10 +867,8 @@ PepperFlashSettingsManager::PepperFlashSettingsManager( ...@@ -681,10 +867,8 @@ PepperFlashSettingsManager::PepperFlashSettingsManager(
} }
PepperFlashSettingsManager::~PepperFlashSettingsManager() { PepperFlashSettingsManager::~PepperFlashSettingsManager() {
if (core_.get()) { if (core_.get())
core_->Detach(); core_->Detach();
core_ = NULL;
}
} }
// static // static
...@@ -765,6 +949,26 @@ uint32 PepperFlashSettingsManager::SetSitePermission( ...@@ -765,6 +949,26 @@ uint32 PepperFlashSettingsManager::SetSitePermission(
return id; return id;
} }
uint32 PepperFlashSettingsManager::GetSitesWithData() {
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
EnsureCoreExists();
uint32 id = GetNextRequestId();
core_->GetSitesWithData(id);
return id;
}
uint32 PepperFlashSettingsManager::ClearSiteData(const std::string& site,
uint64 flags,
uint64 max_age) {
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
EnsureCoreExists();
uint32 id = GetNextRequestId();
core_->ClearSiteData(id, site, flags, max_age);
return id;
}
uint32 PepperFlashSettingsManager::GetNextRequestId() { uint32 PepperFlashSettingsManager::GetNextRequestId() {
return next_request_id_++; return next_request_id_++;
} }
......
...@@ -42,6 +42,12 @@ class PepperFlashSettingsManager { ...@@ -42,6 +42,12 @@ class PepperFlashSettingsManager {
virtual void OnSetSitePermissionCompleted(uint32 request_id, virtual void OnSetSitePermissionCompleted(uint32 request_id,
bool success) {} bool success) {}
virtual void OnGetSitesWithDataCompleted(
uint32 request_id,
const std::vector<std::string>& sites) {}
virtual void OnClearSiteDataCompleted(uint32 request_id, bool success) {}
}; };
// |client| must outlive this object. It is guaranteed that |client| won't // |client| must outlive this object. It is guaranteed that |client| won't
...@@ -84,6 +90,16 @@ class PepperFlashSettingsManager { ...@@ -84,6 +90,16 @@ class PepperFlashSettingsManager {
uint32 SetSitePermission(PP_Flash_BrowserOperations_SettingType setting_type, uint32 SetSitePermission(PP_Flash_BrowserOperations_SettingType setting_type,
const ppapi::FlashSiteSettings& sites); const ppapi::FlashSiteSettings& sites);
// Gets a list of sites that have stored data.
// Client::OnGetSitesWithDataCompleted() will be called when the operation is
// completed.
uint32 GetSitesWithData();
// Clears data for a certain site.
// Client::OnClearSiteDataompleted() will be called when the operation is
// completed.
uint32 ClearSiteData(const std::string& site, uint64 flags, uint64 max_age);
private: private:
// Core does most of the work. It is ref-counted so that its lifespan can be // Core does most of the work. It is ref-counted so that its lifespan can be
// independent of the containing object's: // independent of the containing object's:
......
...@@ -177,7 +177,7 @@ class PluginDataRemoverImpl::Context ...@@ -177,7 +177,7 @@ class PluginDataRemoverImpl::Context
IPC_MESSAGE_HANDLER(PluginHostMsg_ClearSiteDataResult, IPC_MESSAGE_HANDLER(PluginHostMsg_ClearSiteDataResult,
OnClearSiteDataResult) OnClearSiteDataResult)
IPC_MESSAGE_HANDLER(PpapiHostMsg_ClearSiteDataResult, IPC_MESSAGE_HANDLER(PpapiHostMsg_ClearSiteDataResult,
OnClearSiteDataResult) OnPpapiClearSiteDataResult)
IPC_MESSAGE_UNHANDLED_ERROR() IPC_MESSAGE_UNHANDLED_ERROR()
IPC_END_MESSAGE_MAP() IPC_END_MESSAGE_MAP()
...@@ -232,7 +232,7 @@ class PluginDataRemoverImpl::Context ...@@ -232,7 +232,7 @@ class PluginDataRemoverImpl::Context
#else #else
FilePath plugin_data_path = profile_path.Append(FilePath(plugin_name_)); FilePath plugin_data_path = profile_path.Append(FilePath(plugin_name_));
#endif #endif
msg = new PpapiMsg_ClearSiteData(plugin_data_path, std::string(), msg = new PpapiMsg_ClearSiteData(0u, plugin_data_path, std::string(),
kClearAllData, max_age); kClearAllData, max_age);
} else { } else {
msg = new PluginMsg_ClearSiteData(std::string(), kClearAllData, max_age); msg = new PluginMsg_ClearSiteData(std::string(), kClearAllData, max_age);
...@@ -244,7 +244,14 @@ class PluginDataRemoverImpl::Context ...@@ -244,7 +244,14 @@ class PluginDataRemoverImpl::Context
} }
} }
// Handles the *HostMsg_ClearSiteDataResult message. // Handles the PpapiHostMsg_ClearSiteDataResult message by delegating to the
// PluginHostMsg_ClearSiteDataResult handler.
void OnPpapiClearSiteDataResult(uint32 request_id, bool success) {
DCHECK_EQ(0u, request_id);
OnClearSiteDataResult(success);
}
// Handles the PluginHostMsg_ClearSiteDataResult message.
void OnClearSiteDataResult(bool success) { void OnClearSiteDataResult(bool success) {
LOG_IF(ERROR, !success) << "ClearSiteData returned error"; LOG_IF(ERROR, !success) << "ClearSiteData returned error";
UMA_HISTOGRAM_TIMES("ClearPluginData.time", UMA_HISTOGRAM_TIMES("ClearPluginData.time",
......
...@@ -77,6 +77,7 @@ BrokerProcessDispatcher::BrokerProcessDispatcher( ...@@ -77,6 +77,7 @@ BrokerProcessDispatcher::BrokerProcessDispatcher(
PP_ConnectInstance_Func connect_instance) PP_ConnectInstance_Func connect_instance)
: ppapi::proxy::BrokerSideDispatcher(connect_instance), : ppapi::proxy::BrokerSideDispatcher(connect_instance),
get_plugin_interface_(get_plugin_interface), get_plugin_interface_(get_plugin_interface),
flash_browser_operations_1_3_(NULL),
flash_browser_operations_1_2_(NULL), flash_browser_operations_1_2_(NULL),
flash_browser_operations_1_0_(NULL) { flash_browser_operations_1_0_(NULL) {
ChildProcess::current()->AddRefProcess(); ChildProcess::current()->AddRefProcess();
...@@ -89,6 +90,10 @@ BrokerProcessDispatcher::BrokerProcessDispatcher( ...@@ -89,6 +90,10 @@ BrokerProcessDispatcher::BrokerProcessDispatcher(
flash_browser_operations_1_2_ = flash_browser_operations_1_2_ =
static_cast<const PPP_Flash_BrowserOperations_1_2*>( static_cast<const PPP_Flash_BrowserOperations_1_2*>(
get_plugin_interface_(PPP_FLASH_BROWSEROPERATIONS_INTERFACE_1_2)); get_plugin_interface_(PPP_FLASH_BROWSEROPERATIONS_INTERFACE_1_2));
flash_browser_operations_1_3_ =
static_cast<const PPP_Flash_BrowserOperations_1_3*>(
get_plugin_interface_(PPP_FLASH_BROWSEROPERATIONS_INTERFACE_1_3));
} }
} }
...@@ -108,6 +113,7 @@ BrokerProcessDispatcher::~BrokerProcessDispatcher() { ...@@ -108,6 +113,7 @@ BrokerProcessDispatcher::~BrokerProcessDispatcher() {
bool BrokerProcessDispatcher::OnMessageReceived(const IPC::Message& msg) { bool BrokerProcessDispatcher::OnMessageReceived(const IPC::Message& msg) {
IPC_BEGIN_MESSAGE_MAP(BrokerProcessDispatcher, msg) IPC_BEGIN_MESSAGE_MAP(BrokerProcessDispatcher, msg)
IPC_MESSAGE_HANDLER(PpapiMsg_GetSitesWithData, OnMsgGetSitesWithData)
IPC_MESSAGE_HANDLER(PpapiMsg_ClearSiteData, OnMsgClearSiteData) IPC_MESSAGE_HANDLER(PpapiMsg_ClearSiteData, OnMsgClearSiteData)
IPC_MESSAGE_HANDLER(PpapiMsg_DeauthorizeContentLicenses, IPC_MESSAGE_HANDLER(PpapiMsg_DeauthorizeContentLicenses,
OnMsgDeauthorizeContentLicenses) OnMsgDeauthorizeContentLicenses)
...@@ -130,13 +136,22 @@ void BrokerProcessDispatcher::OnGetPermissionSettingsCompleted( ...@@ -130,13 +136,22 @@ void BrokerProcessDispatcher::OnGetPermissionSettingsCompleted(
request_id, success, default_permission, sites)); request_id, success, default_permission, sites));
} }
void BrokerProcessDispatcher::OnMsgGetSitesWithData(
uint32 request_id,
const FilePath& plugin_data_path) {
std::vector<std::string> sites;
GetSitesWithData(plugin_data_path, &sites);
Send(new PpapiHostMsg_GetSitesWithDataResult(request_id, sites));
}
void BrokerProcessDispatcher::OnMsgClearSiteData( void BrokerProcessDispatcher::OnMsgClearSiteData(
uint32 request_id,
const FilePath& plugin_data_path, const FilePath& plugin_data_path,
const std::string& site, const std::string& site,
uint64 flags, uint64 flags,
uint64 max_age) { uint64 max_age) {
Send(new PpapiHostMsg_ClearSiteDataResult( Send(new PpapiHostMsg_ClearSiteDataResult(
ClearSiteData(plugin_data_path, site, flags, max_age))); request_id, ClearSiteData(plugin_data_path, site, flags, max_age)));
} }
void BrokerProcessDispatcher::OnMsgDeauthorizeContentLicenses( void BrokerProcessDispatcher::OnMsgDeauthorizeContentLicenses(
...@@ -150,19 +165,30 @@ void BrokerProcessDispatcher::OnMsgGetPermissionSettings( ...@@ -150,19 +165,30 @@ void BrokerProcessDispatcher::OnMsgGetPermissionSettings(
uint32 request_id, uint32 request_id,
const FilePath& plugin_data_path, const FilePath& plugin_data_path,
PP_Flash_BrowserOperations_SettingType setting_type) { PP_Flash_BrowserOperations_SettingType setting_type) {
if (!flash_browser_operations_1_2_) { if (flash_browser_operations_1_3_) {
OnGetPermissionSettingsCompleted( std::string data_str = ConvertPluginDataPath(plugin_data_path);
request_id, false, PP_FLASH_BROWSEROPERATIONS_PERMISSION_DEFAULT, // The GetPermissionSettingsContext object will be deleted in
ppapi::FlashSiteSettings()); // GetPermissionSettingsCallback().
flash_browser_operations_1_3_->GetPermissionSettings(
data_str.c_str(), setting_type, &GetPermissionSettingsCallback,
new GetPermissionSettingsContext(AsWeakPtr(), request_id));
return; return;
} }
std::string data_str = ConvertPluginDataPath(plugin_data_path); if (flash_browser_operations_1_2_) {
// The GetPermissionSettingsContext object will be deleted in std::string data_str = ConvertPluginDataPath(plugin_data_path);
// GetPermissionSettingsCallback(). // The GetPermissionSettingsContext object will be deleted in
flash_browser_operations_1_2_->GetPermissionSettings( // GetPermissionSettingsCallback().
data_str.c_str(), setting_type, &GetPermissionSettingsCallback, flash_browser_operations_1_2_->GetPermissionSettings(
new GetPermissionSettingsContext(AsWeakPtr(), request_id)); data_str.c_str(), setting_type, &GetPermissionSettingsCallback,
new GetPermissionSettingsContext(AsWeakPtr(), request_id));
return;
}
OnGetPermissionSettingsCompleted(
request_id, false, PP_FLASH_BROWSEROPERATIONS_PERMISSION_DEFAULT,
ppapi::FlashSiteSettings());
return;
} }
void BrokerProcessDispatcher::OnMsgSetDefaultPermission( void BrokerProcessDispatcher::OnMsgSetDefaultPermission(
...@@ -186,19 +212,42 @@ void BrokerProcessDispatcher::OnMsgSetSitePermission( ...@@ -186,19 +212,42 @@ void BrokerProcessDispatcher::OnMsgSetSitePermission(
request_id, SetSitePermission(plugin_data_path, setting_type, sites))); request_id, SetSitePermission(plugin_data_path, setting_type, sites)));
} }
void BrokerProcessDispatcher::GetSitesWithData(
const FilePath& plugin_data_path,
std::vector<std::string>* site_vector) {
std::string data_str = ConvertPluginDataPath(plugin_data_path);
if (flash_browser_operations_1_3_) {
char** sites = NULL;
flash_browser_operations_1_3_->GetSitesWithData(data_str.c_str(), &sites);
if (!sites)
return;
for (size_t i = 0; sites[i]; ++i)
site_vector->push_back(sites[i]);
flash_browser_operations_1_3_->FreeSiteList(sites);
}
}
bool BrokerProcessDispatcher::ClearSiteData(const FilePath& plugin_data_path, bool BrokerProcessDispatcher::ClearSiteData(const FilePath& plugin_data_path,
const std::string& site, const std::string& site,
uint64 flags, uint64 flags,
uint64 max_age) { uint64 max_age) {
std::string data_str = ConvertPluginDataPath(plugin_data_path); std::string data_str = ConvertPluginDataPath(plugin_data_path);
if (flash_browser_operations_1_2_) { if (flash_browser_operations_1_3_) {
flash_browser_operations_1_2_->ClearSiteData( flash_browser_operations_1_3_->ClearSiteData(
data_str.c_str(), site.empty() ? NULL : site.c_str(), flags, max_age); data_str.c_str(), site.empty() ? NULL : site.c_str(), flags, max_age);
return true; return true;
} }
// TODO(viettrungluu): Remove this (and the 1.0 interface) sometime after M21 // TODO(viettrungluu): Remove this (and the 1.0 interface) sometime after M21
// goes to Stable. // goes to Stable.
if (flash_browser_operations_1_2_) {
flash_browser_operations_1_2_->ClearSiteData(
data_str.c_str(), site.empty() ? NULL : site.c_str(), flags, max_age);
return true;
}
if (flash_browser_operations_1_0_) { if (flash_browser_operations_1_0_) {
flash_browser_operations_1_0_->ClearSiteData( flash_browser_operations_1_0_->ClearSiteData(
data_str.c_str(), site.empty() ? NULL : site.c_str(), flags, max_age); data_str.c_str(), site.empty() ? NULL : site.c_str(), flags, max_age);
...@@ -210,12 +259,19 @@ bool BrokerProcessDispatcher::ClearSiteData(const FilePath& plugin_data_path, ...@@ -210,12 +259,19 @@ bool BrokerProcessDispatcher::ClearSiteData(const FilePath& plugin_data_path,
bool BrokerProcessDispatcher::DeauthorizeContentLicenses( bool BrokerProcessDispatcher::DeauthorizeContentLicenses(
const FilePath& plugin_data_path) { const FilePath& plugin_data_path) {
if (!flash_browser_operations_1_2_) if (flash_browser_operations_1_3_) {
return false; std::string data_str = ConvertPluginDataPath(plugin_data_path);
return PP_ToBool(flash_browser_operations_1_3_->DeauthorizeContentLicenses(
data_str.c_str()));
}
std::string data_str = ConvertPluginDataPath(plugin_data_path); if (flash_browser_operations_1_2_) {
return PP_ToBool(flash_browser_operations_1_2_->DeauthorizeContentLicenses( std::string data_str = ConvertPluginDataPath(plugin_data_path);
data_str.c_str())); return PP_ToBool(flash_browser_operations_1_2_->DeauthorizeContentLicenses(
data_str.c_str()));
}
return false;
} }
bool BrokerProcessDispatcher::SetDefaultPermission( bool BrokerProcessDispatcher::SetDefaultPermission(
...@@ -223,22 +279,27 @@ bool BrokerProcessDispatcher::SetDefaultPermission( ...@@ -223,22 +279,27 @@ bool BrokerProcessDispatcher::SetDefaultPermission(
PP_Flash_BrowserOperations_SettingType setting_type, PP_Flash_BrowserOperations_SettingType setting_type,
PP_Flash_BrowserOperations_Permission permission, PP_Flash_BrowserOperations_Permission permission,
bool clear_site_specific) { bool clear_site_specific) {
if (!flash_browser_operations_1_2_) if (flash_browser_operations_1_3_) {
return false; std::string data_str = ConvertPluginDataPath(plugin_data_path);
return PP_ToBool(flash_browser_operations_1_3_->SetDefaultPermission(
data_str.c_str(), setting_type, permission,
PP_FromBool(clear_site_specific)));
}
std::string data_str = ConvertPluginDataPath(plugin_data_path); if (flash_browser_operations_1_2_) {
return PP_ToBool(flash_browser_operations_1_2_->SetDefaultPermission( std::string data_str = ConvertPluginDataPath(plugin_data_path);
data_str.c_str(), setting_type, permission, return PP_ToBool(flash_browser_operations_1_2_->SetDefaultPermission(
PP_FromBool(clear_site_specific))); data_str.c_str(), setting_type, permission,
PP_FromBool(clear_site_specific)));
}
return false;
} }
bool BrokerProcessDispatcher::SetSitePermission( bool BrokerProcessDispatcher::SetSitePermission(
const FilePath& plugin_data_path, const FilePath& plugin_data_path,
PP_Flash_BrowserOperations_SettingType setting_type, PP_Flash_BrowserOperations_SettingType setting_type,
const ppapi::FlashSiteSettings& sites) { const ppapi::FlashSiteSettings& sites) {
if (!flash_browser_operations_1_2_)
return false;
if (sites.empty()) if (sites.empty())
return true; return true;
...@@ -251,8 +312,19 @@ bool BrokerProcessDispatcher::SetSitePermission( ...@@ -251,8 +312,19 @@ bool BrokerProcessDispatcher::SetSitePermission(
site_array[i].permission = sites[i].permission; site_array[i].permission = sites[i].permission;
} }
PP_Bool result = flash_browser_operations_1_2_->SetSitePermission( if (flash_browser_operations_1_3_) {
data_str.c_str(), setting_type, sites.size(), site_array.get()); PP_Bool result = flash_browser_operations_1_3_->SetSitePermission(
data_str.c_str(), setting_type, sites.size(), site_array.get());
return PP_ToBool(result);
}
return PP_ToBool(result); if (flash_browser_operations_1_2_) {
PP_Bool result = flash_browser_operations_1_2_->SetSitePermission(
data_str.c_str(), setting_type, sites.size(), site_array.get());
return PP_ToBool(result);
}
return false;
} }
...@@ -32,7 +32,10 @@ class BrokerProcessDispatcher ...@@ -32,7 +32,10 @@ class BrokerProcessDispatcher
const ppapi::FlashSiteSettings& sites); const ppapi::FlashSiteSettings& sites);
private: private:
void OnMsgClearSiteData(const FilePath& plugin_data_path, void OnMsgGetSitesWithData(uint32 request_id,
const FilePath& plugin_data_path);
void OnMsgClearSiteData(uint32 request_id,
const FilePath& plugin_data_path,
const std::string& site, const std::string& site,
uint64 flags, uint64 flags,
uint64 max_age); uint64 max_age);
...@@ -54,11 +57,16 @@ class BrokerProcessDispatcher ...@@ -54,11 +57,16 @@ class BrokerProcessDispatcher
PP_Flash_BrowserOperations_SettingType setting_type, PP_Flash_BrowserOperations_SettingType setting_type,
const ppapi::FlashSiteSettings& sites); const ppapi::FlashSiteSettings& sites);
// Returns a list of sites that have data stored.
void GetSitesWithData(const FilePath& plugin_data_path,
std::vector<std::string>* sites);
// Requests that the plugin clear data, returning true on success. // Requests that the plugin clear data, returning true on success.
bool ClearSiteData(const FilePath& plugin_data_path, bool ClearSiteData(const FilePath& plugin_data_path,
const std::string& site, const std::string& site,
uint64 flags, uint64 flags,
uint64 max_age); uint64 max_age);
bool DeauthorizeContentLicenses(const FilePath& plugin_data_path); bool DeauthorizeContentLicenses(const FilePath& plugin_data_path);
bool SetDefaultPermission(const FilePath& plugin_data_path, bool SetDefaultPermission(const FilePath& plugin_data_path,
PP_Flash_BrowserOperations_SettingType setting_type, PP_Flash_BrowserOperations_SettingType setting_type,
...@@ -70,6 +78,7 @@ class BrokerProcessDispatcher ...@@ -70,6 +78,7 @@ class BrokerProcessDispatcher
PP_GetInterface_Func get_plugin_interface_; PP_GetInterface_Func get_plugin_interface_;
const PPP_Flash_BrowserOperations_1_3* flash_browser_operations_1_3_;
const PPP_Flash_BrowserOperations_1_2* flash_browser_operations_1_2_; const PPP_Flash_BrowserOperations_1_2* flash_browser_operations_1_2_;
const PPP_Flash_BrowserOperations_1_0* flash_browser_operations_1_0_; const PPP_Flash_BrowserOperations_1_0* flash_browser_operations_1_0_;
......
...@@ -9,7 +9,8 @@ ...@@ -9,7 +9,8 @@
label Chrome { label Chrome {
M20 = 1.0, M20 = 1.0,
M21 = 1.2 M21 = 1.2,
M22 = 1.3
}; };
[assert_size(4)] [assert_size(4)]
...@@ -46,29 +47,28 @@ interface PPP_Flash_BrowserOperations { ...@@ -46,29 +47,28 @@ interface PPP_Flash_BrowserOperations {
/** /**
* This function allows the plugin to implement the "Clear site data" feature. * This function allows the plugin to implement the "Clear site data" feature.
* *
* @plugin_data_path String containing the directory where the plugin data is * @param[in] plugin_data_path String containing the directory where the
* plugin data is
* stored. On UTF16 systems (Windows), this will be encoded as UTF-8. It will * stored. On UTF16 systems (Windows), this will be encoded as UTF-8. It will
* be an absolute path and will not have a directory separator (slash) at the * be an absolute path and will not have a directory separator (slash) at the
* end. * end.
* * @param[in] site String specifying which site to clear the data for. This
* @arg site String specifying which site to clear the data for. This will * will be null to clear data for all sites.
* be null to clear data for all sites. * @param[in] flags Currently always 0 in Chrome to clear all data. This may
* * be extended in the future to clear only specific types of data.
* @arg flags Currently always 0 in Chrome to clear all data. This may be * @param[in] max_age The maximum age in seconds to clear data for. This
* extended in the future to clear only specific types of data. * allows the plugin to implement "clear past hour" and "clear past data",
* * etc.
* @arg max_age The maximum age in seconds to clear data for. This allows the
* plugin to implement "clear past hour" and "clear past data", etc.
* *
* @return PP_TRUE on success, PP_FALSE on failure. * @return PP_TRUE on success, PP_FALSE on failure.
* *
* See also the NPP_ClearSiteData function in NPAPI. * See also the NPP_ClearSiteData function in NPAPI.
* https://wiki.mozilla.org/NPAPI:ClearSiteData * https://wiki.mozilla.org/NPAPI:ClearSiteData
*/ */
PP_Bool ClearSiteData(str_t plugin_data_path, PP_Bool ClearSiteData([in] str_t plugin_data_path,
str_t site, [in] str_t site,
uint64_t flags, [in] uint64_t flags,
uint64_t max_age); [in] uint64_t max_age);
/** /**
* Requests the plugin to deauthorize content licenses. It prevents Flash from * Requests the plugin to deauthorize content licenses. It prevents Flash from
...@@ -141,4 +141,28 @@ interface PPP_Flash_BrowserOperations { ...@@ -141,4 +141,28 @@ interface PPP_Flash_BrowserOperations {
[in] PP_Flash_BrowserOperations_SettingType setting_type, [in] PP_Flash_BrowserOperations_SettingType setting_type,
[in] uint32_t site_count, [in] uint32_t site_count,
[in, size_is(site_count)] PP_Flash_BrowserOperations_SiteSetting[] sites); [in, size_is(site_count)] PP_Flash_BrowserOperations_SiteSetting[] sites);
/**
* Returns a list of sites that have stored data, for use with the
* "Clear site data" feature.
*
* @param[in] plugin_data_path String containing the directory where the
* plugin data is stored.
* @param[out] sites A NULL-terminated array of sites that have stored data.
* Use FreeSiteList on the the array when done.
*
* See also the NPP_GetSitesWithData function in NPAPI:
* https://wiki.mozilla.org/NPAPI:ClearSiteData
*/
[version=1.3]
void GetSitesWithData([in] str_t plugin_data_path,
[out] str_t[] sites);
/**
* Frees the list of sites returned by GetSitesWithData.
*
* @param[in] sites A NULL-terminated array of strings.
*/
[version=1.3]
void FreeSiteList([inout] str_t[] sites);
}; };
...@@ -4,7 +4,7 @@ ...@@ -4,7 +4,7 @@
*/ */
/* From private/ppp_flash_browser_operations.idl, /* From private/ppp_flash_browser_operations.idl,
* modified Fri Jun 15 17:00:18 2012. * modified Wed Jul 25 16:53:17 2012.
*/ */
#ifndef PPAPI_C_PRIVATE_PPP_FLASH_BROWSER_OPERATIONS_H_ #ifndef PPAPI_C_PRIVATE_PPP_FLASH_BROWSER_OPERATIONS_H_
...@@ -18,8 +18,10 @@ ...@@ -18,8 +18,10 @@
"PPP_Flash_BrowserOperations;1.0" "PPP_Flash_BrowserOperations;1.0"
#define PPP_FLASH_BROWSEROPERATIONS_INTERFACE_1_2 \ #define PPP_FLASH_BROWSEROPERATIONS_INTERFACE_1_2 \
"PPP_Flash_BrowserOperations;1.2" "PPP_Flash_BrowserOperations;1.2"
#define PPP_FLASH_BROWSEROPERATIONS_INTERFACE_1_3 \
"PPP_Flash_BrowserOperations;1.3"
#define PPP_FLASH_BROWSEROPERATIONS_INTERFACE \ #define PPP_FLASH_BROWSEROPERATIONS_INTERFACE \
PPP_FLASH_BROWSEROPERATIONS_INTERFACE_1_2 PPP_FLASH_BROWSEROPERATIONS_INTERFACE_1_3
/** /**
* @file * @file
...@@ -82,23 +84,22 @@ typedef void (*PPB_Flash_BrowserOperations_GetSettingsCallback)( ...@@ -82,23 +84,22 @@ typedef void (*PPB_Flash_BrowserOperations_GetSettingsCallback)(
/** /**
* This interface allows the browser to request the plugin do things. * This interface allows the browser to request the plugin do things.
*/ */
struct PPP_Flash_BrowserOperations_1_2 { struct PPP_Flash_BrowserOperations_1_3 {
/** /**
* This function allows the plugin to implement the "Clear site data" feature. * This function allows the plugin to implement the "Clear site data" feature.
* *
* @plugin_data_path String containing the directory where the plugin data is * @param[in] plugin_data_path String containing the directory where the
* plugin data is
* stored. On UTF16 systems (Windows), this will be encoded as UTF-8. It will * stored. On UTF16 systems (Windows), this will be encoded as UTF-8. It will
* be an absolute path and will not have a directory separator (slash) at the * be an absolute path and will not have a directory separator (slash) at the
* end. * end.
* * @param[in] site String specifying which site to clear the data for. This
* @arg site String specifying which site to clear the data for. This will * will be null to clear data for all sites.
* be null to clear data for all sites. * @param[in] flags Currently always 0 in Chrome to clear all data. This may
* * be extended in the future to clear only specific types of data.
* @arg flags Currently always 0 in Chrome to clear all data. This may be * @param[in] max_age The maximum age in seconds to clear data for. This
* extended in the future to clear only specific types of data. * allows the plugin to implement "clear past hour" and "clear past data",
* * etc.
* @arg max_age The maximum age in seconds to clear data for. This allows the
* plugin to implement "clear past hour" and "clear past data", etc.
* *
* @return PP_TRUE on success, PP_FALSE on failure. * @return PP_TRUE on success, PP_FALSE on failure.
* *
...@@ -173,9 +174,28 @@ struct PPP_Flash_BrowserOperations_1_2 { ...@@ -173,9 +174,28 @@ struct PPP_Flash_BrowserOperations_1_2 {
PP_Flash_BrowserOperations_SettingType setting_type, PP_Flash_BrowserOperations_SettingType setting_type,
uint32_t site_count, uint32_t site_count,
const struct PP_Flash_BrowserOperations_SiteSetting sites[]); const struct PP_Flash_BrowserOperations_SiteSetting sites[]);
/**
* Returns a list of sites that have stored data, for use with the
* "Clear site data" feature.
*
* @param[in] plugin_data_path String containing the directory where the
* plugin data is stored.
* @param[out] sites A NULL-terminated array of sites that have stored data.
* Use FreeSiteList on the the array when done.
*
* See also the NPP_GetSitesWithData function in NPAPI:
* https://wiki.mozilla.org/NPAPI:ClearSiteData
*/
void (*GetSitesWithData)(const char* plugin_data_path, char** sites[]);
/**
* Frees the list of sites returned by GetSitesWithData.
*
* @param[in] sites A NULL-terminated array of strings.
*/
void (*FreeSiteList)(char* sites[]);
}; };
typedef struct PPP_Flash_BrowserOperations_1_2 PPP_Flash_BrowserOperations; typedef struct PPP_Flash_BrowserOperations_1_3 PPP_Flash_BrowserOperations;
struct PPP_Flash_BrowserOperations_1_0 { struct PPP_Flash_BrowserOperations_1_0 {
PP_Bool (*ClearSiteData)(const char* plugin_data_path, PP_Bool (*ClearSiteData)(const char* plugin_data_path,
...@@ -183,6 +203,29 @@ struct PPP_Flash_BrowserOperations_1_0 { ...@@ -183,6 +203,29 @@ struct PPP_Flash_BrowserOperations_1_0 {
uint64_t flags, uint64_t flags,
uint64_t max_age); uint64_t max_age);
}; };
struct PPP_Flash_BrowserOperations_1_2 {
PP_Bool (*ClearSiteData)(const char* plugin_data_path,
const char* site,
uint64_t flags,
uint64_t max_age);
PP_Bool (*DeauthorizeContentLicenses)(const char* plugin_data_path);
void (*GetPermissionSettings)(
const char* plugin_data_path,
PP_Flash_BrowserOperations_SettingType setting_type,
PPB_Flash_BrowserOperations_GetSettingsCallback callback,
void* user_data);
PP_Bool (*SetDefaultPermission)(
const char* plugin_data_path,
PP_Flash_BrowserOperations_SettingType setting_type,
PP_Flash_BrowserOperations_Permission permission,
PP_Bool clear_site_specific);
PP_Bool (*SetSitePermission)(
const char* plugin_data_path,
PP_Flash_BrowserOperations_SettingType setting_type,
uint32_t site_count,
const struct PP_Flash_BrowserOperations_SiteSetting sites[]);
};
/** /**
* @} * @}
*/ */
......
...@@ -289,15 +289,27 @@ IPC_SYNC_MESSAGE_CONTROL1_1(PpapiMsg_SupportsInterface, ...@@ -289,15 +289,27 @@ IPC_SYNC_MESSAGE_CONTROL1_1(PpapiMsg_SupportsInterface,
IPC_MESSAGE_CONTROL1(PpapiMsg_SetNetworkState, IPC_MESSAGE_CONTROL1(PpapiMsg_SetNetworkState,
bool /* online */) bool /* online */)
// Requests a list of sites that have data stored from the plugin. The plugin
// process will respond with PpapiHostMsg_GetSitesWithDataResult. This is used
// for Flash.
IPC_MESSAGE_CONTROL2(PpapiMsg_GetSitesWithData,
uint32 /* request_id */,
FilePath /* plugin_data_path */)
IPC_MESSAGE_CONTROL2(PpapiHostMsg_GetSitesWithDataResult,
uint32 /* request_id */,
std::vector<std::string> /* sites */)
// Instructs the plugin to clear data for the given site & time. The plugin // Instructs the plugin to clear data for the given site & time. The plugin
// process will respond with PpapiHostMsg_ClearSiteDataResult. This is used // process will respond with PpapiHostMsg_ClearSiteDataResult. This is used
// for Flash. // for Flash.
IPC_MESSAGE_CONTROL4(PpapiMsg_ClearSiteData, IPC_MESSAGE_CONTROL5(PpapiMsg_ClearSiteData,
uint32 /* request_id */,
FilePath /* plugin_data_path */, FilePath /* plugin_data_path */,
std::string /* site */, std::string /* site */,
uint64 /* flags */, uint64 /* flags */,
uint64 /* max_age */) uint64 /* max_age */)
IPC_MESSAGE_CONTROL1(PpapiHostMsg_ClearSiteDataResult, IPC_MESSAGE_CONTROL2(PpapiHostMsg_ClearSiteDataResult,
uint32 /* request_id */,
bool /* success */) bool /* success */)
IPC_MESSAGE_CONTROL2(PpapiMsg_DeauthorizeContentLicenses, IPC_MESSAGE_CONTROL2(PpapiMsg_DeauthorizeContentLicenses,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment