summaryrefslogtreecommitdiffstats
path: root/ppapi/proxy/ppb_file_ref_proxy.cc
diff options
context:
space:
mode:
Diffstat (limited to 'ppapi/proxy/ppb_file_ref_proxy.cc')
-rw-r--r--ppapi/proxy/ppb_file_ref_proxy.cc9
1 files changed, 9 insertions, 0 deletions
diff --git a/ppapi/proxy/ppb_file_ref_proxy.cc b/ppapi/proxy/ppb_file_ref_proxy.cc
index 20b522c..e481f86 100644
--- a/ppapi/proxy/ppb_file_ref_proxy.cc
+++ b/ppapi/proxy/ppb_file_ref_proxy.cc
@@ -33,6 +33,9 @@ class FileRef : public PPB_FileRef_Shared {
explicit FileRef(const PPB_FileRef_CreateInfo& info);
virtual ~FileRef();
+ // Resource overrides.
+ virtual void LastPluginRefWasDeleted() OVERRIDE;
+
// PPB_FileRef_API implementation (not provided by PPB_FileRef_Shared).
virtual PP_Resource GetParent() OVERRIDE;
virtual int32_t MakeDirectory(PP_Bool make_ancestors,
@@ -77,6 +80,11 @@ FileRef::FileRef(const PPB_FileRef_CreateInfo& info)
}
FileRef::~FileRef() {
+ // The callbacks map should have been cleared by LastPluginRefWasDeleted.
+ DCHECK(pending_callbacks_.empty());
+}
+
+void FileRef::LastPluginRefWasDeleted() {
// Abort all pending callbacks. Do this by posting a task to avoid reentering
// the plugin's Release() call that probably deleted this object.
for (PendingCallbackMap::iterator i = pending_callbacks_.begin();
@@ -85,6 +93,7 @@ FileRef::~FileRef() {
i->second.func, i->second.user_data,
static_cast<int32_t>(PP_ERROR_ABORTED)));
}
+ pending_callbacks_.clear();
}
PP_Resource FileRef::GetParent() {