blob: 75e8337d2341fcf6d99c5bda4ec8d98a2453ab27 [file] [log] [blame]
// Copyright 2019 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_UI_EXTENSIONS_EXTENSION_REMOVAL_WATCHER_H_
#define CHROME_BROWSER_UI_EXTENSIONS_EXTENSION_REMOVAL_WATCHER_H_
#include "base/callback.h"
#include "base/memory/weak_ptr.h"
#include "base/scoped_observation.h"
#include "chrome/browser/ui/browser_list_observer.h"
#include "extensions/browser/extension_registry.h"
#include "extensions/browser/extension_registry_observer.h"
// ExtensionRemovalWatcher watches a browser and an extension for either:
// 1) The browser being closed, or
// 2) The extension being uninstalled from the browser's profile
// and in either case, invokes the provided callback.
class ExtensionRemovalWatcher : public BrowserListObserver,
public extensions::ExtensionRegistryObserver {
public:
ExtensionRemovalWatcher(Browser* browser,
scoped_refptr<const extensions::Extension> extension,
base::OnceClosure callback);
~ExtensionRemovalWatcher() override;
private:
// ExtensionRegistryObserver:
void OnExtensionUnloaded(content::BrowserContext* browser_context,
const extensions::Extension* extension,
extensions::UnloadedExtensionReason reason) override;
// BrowserListObserver:
void OnBrowserClosing(Browser* browser) override;
const Browser* browser_;
const scoped_refptr<const extensions::Extension> extension_;
base::OnceClosure callback_;
base::ScopedObservation<extensions::ExtensionRegistry,
extensions::ExtensionRegistryObserver>
extension_registry_observation_{this};
};
#endif // CHROME_BROWSER_UI_EXTENSIONS_EXTENSION_REMOVAL_WATCHER_H_