1 // Copyright 2018 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 #include "chrome/browser/extensions/chrome_zipfile_installer.h"
6 
7 #include "base/bind.h"
8 #include "base/check.h"
9 #include "base/files/file_path.h"
10 #include "base/memory/weak_ptr.h"
11 #include "chrome/browser/extensions/extension_service.h"
12 #include "chrome/browser/extensions/load_error_reporter.h"
13 #include "chrome/browser/extensions/unpacked_installer.h"
14 #include "chrome/browser/profiles/profile.h"
15 
16 namespace extensions {
17 
MakeRegisterInExtensionServiceCallback(ExtensionService * service)18 ZipFileInstaller::DoneCallback MakeRegisterInExtensionServiceCallback(
19     ExtensionService* service) {
20   return base::BindOnce(
21       [](base::WeakPtr<ExtensionService> extension_service_weak,
22          const base::FilePath& zip_file, const base::FilePath& unzip_dir,
23          const std::string& error) {
24         if (!extension_service_weak)
25           return;
26 
27         if (!unzip_dir.empty()) {
28           DCHECK(error.empty());
29           UnpackedInstaller::Create(extension_service_weak.get())
30               ->Load(unzip_dir);
31           return;
32         }
33         DCHECK(!error.empty());
34         LoadErrorReporter::GetInstance()->ReportLoadError(
35             zip_file, error, extension_service_weak->profile(),
36             /*noisy_on_failure=*/true);
37       },
38       service->AsWeakPtr());
39 }
40 
41 }  // namespace extensions
42