blob: 0c61297e9d3924d1325fda6701a3cc51410f8234 [file] [log] [blame]
Avi Drissman60039d42022-09-13 21:49:051// Copyright 2017 The Chromium Authors
lazyboya00eafc2017-04-08 00:57:192// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#include "extensions/browser/mock_external_provider.h"
6
Devlin Cronind4c2a8f32017-09-29 17:08:307#include <memory>
8
lazyboya00eafc2017-04-08 00:57:199#include "base/version.h"
10#include "extensions/browser/external_install_info.h"
11#include "extensions/common/extension.h"
12
13namespace extensions {
14
15MockExternalProvider::MockExternalProvider(VisitorInterface* visitor,
Gyuyoung Kim2e954c42021-03-19 14:06:2916 mojom::ManifestLocation location)
lazyboya00eafc2017-04-08 00:57:1917 : location_(location), visitor_(visitor), visit_count_(0) {}
18
19MockExternalProvider::~MockExternalProvider() {}
20
21void MockExternalProvider::UpdateOrAddExtension(const ExtensionId& id,
lazyboy8a08c9d2017-04-11 19:53:2222 const std::string& version_str,
lazyboya00eafc2017-04-08 00:57:1923 const base::FilePath& path) {
Jeremy Roman16529d0e2017-08-24 18:13:4724 auto info = std::make_unique<ExternalInstallInfoFile>(
Devlin Cronind4c2a8f32017-09-29 17:08:3025 id, base::Version(version_str), path, location_, Extension::NO_FLAGS,
26 false, false);
Minh X. Nguyen5c83226102018-04-19 16:10:2527 UpdateOrAddExtension(std::move(info));
lazyboy8a08c9d2017-04-11 19:53:2228}
29
30void MockExternalProvider::UpdateOrAddExtension(
31 std::unique_ptr<ExternalInstallInfoFile> info) {
Minh X. Nguyen5c83226102018-04-19 16:10:2532 const std::string& id = info->extension_id;
33 CHECK(url_extension_map_.find(id) == url_extension_map_.end());
34 file_extension_map_[id] = std::move(info);
35}
36
37void MockExternalProvider::UpdateOrAddExtension(
38 std::unique_ptr<ExternalInstallInfoUpdateUrl> info) {
39 const std::string& id = info->extension_id;
40 CHECK(file_extension_map_.find(id) == file_extension_map_.end());
41 url_extension_map_[id] = std::move(info);
lazyboya00eafc2017-04-08 00:57:1942}
43
44void MockExternalProvider::RemoveExtension(const ExtensionId& id) {
Minh X. Nguyen5c83226102018-04-19 16:10:2545 file_extension_map_.erase(id);
46 url_extension_map_.erase(id);
lazyboya00eafc2017-04-08 00:57:1947}
48
49void MockExternalProvider::VisitRegisteredExtension() {
50 visit_count_++;
Minh X. Nguyen5c83226102018-04-19 16:10:2551 for (const auto& extension_kv : file_extension_map_)
lazyboy8a08c9d2017-04-11 19:53:2252 visitor_->OnExternalExtensionFileFound(*extension_kv.second);
Minh X. Nguyen5c83226102018-04-19 16:10:2553 for (const auto& extension_kv : url_extension_map_)
54 visitor_->OnExternalExtensionUpdateUrlFound(*extension_kv.second,
Maria Petrisorbb5226b2022-06-02 09:10:5155 true /* force_update */);
lazyboya00eafc2017-04-08 00:57:1956 visitor_->OnExternalProviderReady(this);
57}
58
Maria Petrisordba7ac42021-10-06 09:01:3059void MockExternalProvider::TriggerOnExternalExtensionFound() {
60 for (const auto& extension_kv : file_extension_map_)
61 visitor_->OnExternalExtensionFileFound(*extension_kv.second);
62 for (const auto& extension_kv : url_extension_map_)
63 visitor_->OnExternalExtensionUpdateUrlFound(*extension_kv.second,
Maria Petrisorbb5226b2022-06-02 09:10:5164 false /* force_update */);
Maria Petrisordba7ac42021-10-06 09:01:3065}
66
lazyboya00eafc2017-04-08 00:57:1967bool MockExternalProvider::HasExtension(const std::string& id) const {
Minh X. Nguyen5c83226102018-04-19 16:10:2568 return file_extension_map_.find(id) != file_extension_map_.end() ||
69 url_extension_map_.find(id) != url_extension_map_.end();
lazyboya00eafc2017-04-08 00:57:1970}
71
72bool MockExternalProvider::GetExtensionDetails(
73 const std::string& id,
Gyuyoung Kim2e954c42021-03-19 14:06:2974 mojom::ManifestLocation* location,
lazyboya00eafc2017-04-08 00:57:1975 std::unique_ptr<base::Version>* version) const {
jdoerriea1e1598b2018-10-10 09:10:3776 auto it1 = file_extension_map_.find(id);
77 auto it2 = url_extension_map_.find(id);
Minh X. Nguyen5c83226102018-04-19 16:10:2578
79 // |id| can't be on both |file_extension_map_| and |url_extension_map_|.
80 if (it1 == file_extension_map_.end() && it2 == url_extension_map_.end())
lazyboya00eafc2017-04-08 00:57:1981 return false;
82
Minh X. Nguyen5c83226102018-04-19 16:10:2583 // Only ExternalInstallInfoFile has version.
84 if (version && it1 != file_extension_map_.end())
Peter Boström5effa322021-04-02 22:39:3985 *version = std::make_unique<base::Version>(it1->second->version);
lazyboya00eafc2017-04-08 00:57:1986
87 if (location)
88 *location = location_;
89
90 return true;
91}
92
93bool MockExternalProvider::IsReady() const {
94 return true;
95}
96
97} // namespace extensions