blob: 373831b2e3b337a867daf5c584902d8363a09100 [file] [log] [blame]
lazyboya00eafc2017-04-08 00:57:191// Copyright 2017 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 "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,
55 true /* is_initial_load */);
lazyboya00eafc2017-04-08 00:57:1956 visitor_->OnExternalProviderReady(this);
57}
58
59bool MockExternalProvider::HasExtension(const std::string& id) const {
Minh X. Nguyen5c83226102018-04-19 16:10:2560 return file_extension_map_.find(id) != file_extension_map_.end() ||
61 url_extension_map_.find(id) != url_extension_map_.end();
lazyboya00eafc2017-04-08 00:57:1962}
63
64bool MockExternalProvider::GetExtensionDetails(
65 const std::string& id,
Gyuyoung Kim2e954c42021-03-19 14:06:2966 mojom::ManifestLocation* location,
lazyboya00eafc2017-04-08 00:57:1967 std::unique_ptr<base::Version>* version) const {
jdoerriea1e1598b2018-10-10 09:10:3768 auto it1 = file_extension_map_.find(id);
69 auto it2 = url_extension_map_.find(id);
Minh X. Nguyen5c83226102018-04-19 16:10:2570
71 // |id| can't be on both |file_extension_map_| and |url_extension_map_|.
72 if (it1 == file_extension_map_.end() && it2 == url_extension_map_.end())
lazyboya00eafc2017-04-08 00:57:1973 return false;
74
Minh X. Nguyen5c83226102018-04-19 16:10:2575 // Only ExternalInstallInfoFile has version.
76 if (version && it1 != file_extension_map_.end())
77 version->reset(new base::Version(it1->second->version));
lazyboya00eafc2017-04-08 00:57:1978
79 if (location)
80 *location = location_;
81
82 return true;
83}
84
85bool MockExternalProvider::IsReady() const {
86 return true;
87}
88
89} // namespace extensions