| Index: chrome/browser/extensions/extension_garbage_collector.h
|
| diff --git a/chrome/browser/extensions/extension_garbage_collector.h b/chrome/browser/extensions/extension_garbage_collector.h
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..d1e52258bc835474c9840bba1144fe601d821cd9
|
| --- /dev/null
|
| +++ b/chrome/browser/extensions/extension_garbage_collector.h
|
| @@ -0,0 +1,83 @@
|
| +// Copyright 2014 The Chromium Authors. All rights reserved.
|
| +// Use of this source code is governed by a BSD-style license that can be
|
| +// found in the LICENSE file.
|
| +
|
| +#ifndef CHROME_BROWSER_EXTENSIONS_EXTENSION_GARBAGE_COLLECTOR_H_
|
| +#define CHROME_BROWSER_EXTENSIONS_EXTENSION_GARBAGE_COLLECTOR_H_
|
| +
|
| +#include <map>
|
| +#include <string>
|
| +
|
| +#include "base/files/file_path.h"
|
| +#include "base/memory/weak_ptr.h"
|
| +
|
| +namespace content {
|
| +class BrowserContext;
|
| +}
|
| +
|
| +class ExtensionService;
|
| +
|
| +namespace extensions {
|
| +
|
| +// The class responsible for cleaning up the cruft left behind on the file
|
| +// system by uninstalled (or failed install) extensions.
|
| +// The class is owned by ExtensionService, but is mostly independent. Tasks to
|
| +// garbage collect extensions and isolated storage are posted once the
|
| +// ExtensionSystem signals ready.
|
| +class ExtensionGarbageCollector {
|
| + public:
|
| + explicit ExtensionGarbageCollector(ExtensionService* extension_service);
|
| + ~ExtensionGarbageCollector();
|
| +
|
| +#if defined(OS_CHROMEOS)
|
| + // Enable or disable garbage collection. See |disable_garbage_collection_|.
|
| + void disable_garbage_collection() { disable_garbage_collection_ = true; }
|
| + void enable_garbage_collection() { disable_garbage_collection_ = false; }
|
| +#endif
|
| +
|
| + // Manually trigger GarbageCollectExtensions() for testing.
|
| + void GarbageCollectExtensionsForTest();
|
| +
|
| + private:
|
| + // Cleans up the extension install directory. It can end up with garbage in it
|
| + // if extensions can't initially be removed when they are uninstalled (eg if a
|
| + // file is in use).
|
| + // Obsolete version directories are removed, as are directories that aren't
|
| + // found in the ExtensionPrefs.
|
| + // The "Temp" directory that is used during extension installation will get
|
| + // removed iff there are no pending installations.
|
| + void GarbageCollectExtensions();
|
| +
|
| + // Garbage collects apps/extensions isolated storage, if it is not currently
|
| + // active (i.e. is not in ExtensionRegistry::ENABLED). There is an exception
|
| + // for ephemeral apps, because they can outlive their cache lifetimes.
|
| + void GarbageCollectIsolatedStorageIfNeeded();
|
| +
|
| + // The ExtensionService which owns this GarbageCollector.
|
| + ExtensionService* extension_service_;
|
| +
|
| + // The BrowserContext associated with the GarbageCollector, for convenience.
|
| + // (This is equivalent to extension_service_->GetBrowserContext().)
|
| + content::BrowserContext* context_;
|
| +
|
| + // The root extensions installation directory.
|
| + base::FilePath install_directory_;
|
| +
|
| +#if defined(OS_CHROMEOS)
|
| + // TODO(rkc): HACK alert - this is only in place to allow the
|
| + // kiosk_mode_screensaver to prevent its extension from getting garbage
|
| + // collected. Remove this once KioskModeScreensaver is removed.
|
| + // See crbug.com/280363
|
| + bool disable_garbage_collection_;
|
| +#endif
|
| +
|
| + // Generate weak pointers for safely posting to the file thread for garbage
|
| + // collection.
|
| + base::WeakPtrFactory<ExtensionGarbageCollector> weak_factory_;
|
| +
|
| + DISALLOW_COPY_AND_ASSIGN(ExtensionGarbageCollector);
|
| +};
|
| +
|
| +} // namespace extensions
|
| +
|
| +#endif // CHROME_BROWSER_EXTENSIONS_EXTENSION_GARBAGE_COLLECTOR_H_
|
|
|