Bug 1234192 - part 2 - Directory should unlink/traverse the OSFileSystem in order to unlink/traverse the window, r=smaug

This commit is contained in:
Andrea Marchesini 2015-12-30 08:53:38 +00:00
parent dd45a48811
commit a6b55475ea
4 changed files with 37 additions and 2 deletions

View File

@ -34,7 +34,20 @@
namespace mozilla {
namespace dom {
NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE_0(Directory)
NS_IMPL_CYCLE_COLLECTION_CLASS(Directory)
NS_IMPL_CYCLE_COLLECTION_UNLINK_BEGIN(Directory)
tmp->mFileSystem->Unlink();
NS_IMPL_CYCLE_COLLECTION_UNLINK_PRESERVED_WRAPPER
NS_IMPL_CYCLE_COLLECTION_UNLINK_END
NS_IMPL_CYCLE_COLLECTION_TRAVERSE_BEGIN(Directory)
tmp->mFileSystem->Traverse(cb);
NS_IMPL_CYCLE_COLLECTION_TRAVERSE_SCRIPT_OBJECTS
NS_IMPL_CYCLE_COLLECTION_TRAVERSE_END
NS_IMPL_CYCLE_COLLECTION_TRACE_WRAPPERCACHE(Directory)
NS_IMPL_CYCLE_COLLECTING_ADDREF(Directory)
NS_IMPL_CYCLE_COLLECTING_RELEASE(Directory)
NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(Directory)

View File

@ -95,6 +95,11 @@ public:
{
return mRequiresPermissionChecks;
}
// CC methods
virtual void Unlink() {}
virtual void Traverse(nsCycleCollectionTraversalCallback &cb) {}
protected:
virtual ~FileSystemBase();

View File

@ -76,5 +76,18 @@ OSFileSystem::IsSafeDirectory(Directory* aDir) const
return true;
}
void
OSFileSystem::Unlink()
{
mWindow = nullptr;
}
void
OSFileSystem::Traverse(nsCycleCollectionTraversalCallback &cb)
{
OSFileSystem* tmp = this;
NS_IMPL_CYCLE_COLLECTION_TRAVERSE(mWindow);
}
} // namespace dom
} // namespace mozilla

View File

@ -12,7 +12,7 @@
namespace mozilla {
namespace dom {
class OSFileSystem : public FileSystemBase
class OSFileSystem final : public FileSystemBase
{
public:
explicit OSFileSystem(const nsAString& aRootDir);
@ -34,6 +34,10 @@ public:
virtual bool
IsSafeDirectory(Directory* aDir) const override;
// CC methods
virtual void Unlink() override;
virtual void Traverse(nsCycleCollectionTraversalCallback &cb) override;
private:
virtual ~OSFileSystem() {}