| // Copyright 2018 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. |
| // Stolen from chrome/browser/component_updater/component_unpacker.cc |
| |
| #include "chrome/chrome_cleaner/components/component_unpacker.h" |
| |
| #include <memory> |
| #include <vector> |
| |
| #include "components/crx_file/crx_verifier.h" |
| #include "third_party/zlib/google/zip.h" |
| |
| namespace chrome_cleaner { |
| |
| ComponentUnpacker::ComponentUnpacker(const std::vector<uint8_t>& pk_hash, |
| const base::FilePath& path) |
| : pk_hash_(pk_hash), path_(path) {} |
| |
| bool ComponentUnpacker::Unpack(const base::FilePath& ouput_folder) { |
| return Verify() && zip::Unzip(path_, ouput_folder); |
| } |
| |
| bool ComponentUnpacker::Verify() { |
| return crx_file::Verify(path_, crx_file::VerifierFormat::CRX2_OR_CRX3, |
| {pk_hash_}, std::vector<uint8_t>(), nullptr, |
| nullptr) == crx_file::VerifierResult::OK_FULL; |
| } |
| |
| ComponentUnpacker::~ComponentUnpacker() {} |
| |
| } // namespace chrome_cleaner |