fix: [extensions] load extensions on the IO thread (#21811)
This commit is contained in:
parent
acb5b75057
commit
100a85f93a
5 changed files with 46 additions and 35 deletions
|
@ -4,6 +4,8 @@
|
|||
|
||||
#include "shell/browser/extensions/atom_extension_loader.h"
|
||||
|
||||
#include <utility>
|
||||
|
||||
#include "base/auto_reset.h"
|
||||
#include "base/bind.h"
|
||||
#include "base/files/file_path.h"
|
||||
|
@ -66,16 +68,14 @@ AtomExtensionLoader::AtomExtensionLoader(
|
|||
|
||||
AtomExtensionLoader::~AtomExtensionLoader() = default;
|
||||
|
||||
const Extension* AtomExtensionLoader::LoadExtension(
|
||||
const base::FilePath& extension_dir) {
|
||||
// TODO(nornagon): load extensions asynchronously on
|
||||
// GetExtensionFileTaskRunner()
|
||||
base::ScopedAllowBlockingForTesting allow_blocking;
|
||||
scoped_refptr<const Extension> extension = LoadUnpacked(extension_dir);
|
||||
if (extension)
|
||||
extension_registrar_.AddExtension(extension);
|
||||
|
||||
return extension.get();
|
||||
void AtomExtensionLoader::LoadExtension(
|
||||
const base::FilePath& extension_dir,
|
||||
base::OnceCallback<void(const Extension*)> loaded) {
|
||||
base::PostTaskAndReplyWithResult(
|
||||
GetExtensionFileTaskRunner().get(), FROM_HERE,
|
||||
base::BindOnce(&LoadUnpacked, extension_dir),
|
||||
base::BindOnce(&AtomExtensionLoader::FinishExtensionLoad,
|
||||
weak_factory_.GetWeakPtr(), std::move(loaded)));
|
||||
}
|
||||
|
||||
void AtomExtensionLoader::ReloadExtension(const ExtensionId& extension_id) {
|
||||
|
@ -100,6 +100,15 @@ void AtomExtensionLoader::UnloadExtension(
|
|||
extension_registrar_.RemoveExtension(extension_id, reason);
|
||||
}
|
||||
|
||||
void AtomExtensionLoader::FinishExtensionLoad(
|
||||
base::OnceCallback<void(const Extension*)> done,
|
||||
scoped_refptr<const Extension> extension) {
|
||||
if (extension) {
|
||||
extension_registrar_.AddExtension(extension);
|
||||
}
|
||||
std::move(done).Run(extension.get());
|
||||
}
|
||||
|
||||
void AtomExtensionLoader::FinishExtensionReload(
|
||||
const ExtensionId& old_extension_id,
|
||||
scoped_refptr<const Extension> extension) {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue