blob: 0ad2a3a6b55633faf98eb50f30a59aa596ac6707 [file] [log] [blame]
// Copyright 2019 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "components/custom_handlers/test_protocol_handler_registry_delegate.h"
#include <utility>
#include "base/check_op.h"
#include "base/functional/bind.h"
#include "base/task/single_thread_task_runner.h"
namespace custom_handlers {
TestProtocolHandlerRegistryDelegate::TestProtocolHandlerRegistryDelegate() =
default;
TestProtocolHandlerRegistryDelegate::~TestProtocolHandlerRegistryDelegate() =
default;
// ProtocolHandlerRegistry::Delegate:
void TestProtocolHandlerRegistryDelegate::RegisterExternalHandler(
const std::string& protocol) {
bool inserted = registered_protocols_.insert(protocol).second;
DCHECK(inserted);
}
void TestProtocolHandlerRegistryDelegate::DeregisterExternalHandler(
const std::string& protocol) {
size_t removed = registered_protocols_.erase(protocol);
DCHECK_EQ(removed, 1u);
}
bool TestProtocolHandlerRegistryDelegate::IsExternalHandlerRegistered(
const std::string& protocol) {
return registered_protocols_.find(protocol) != registered_protocols_.end();
}
void TestProtocolHandlerRegistryDelegate::RegisterWithOSAsDefaultClient(
const std::string& protocol,
DefaultClientCallback callback) {
// Do as-if the registration has to run on another sequence and post back
// the result with a task to the current thread.
base::SingleThreadTaskRunner::GetCurrentDefault()->PostTask(
FROM_HERE, base::BindOnce(std::move(callback), !force_os_failure_));
if (!force_os_failure_)
os_registered_protocols_.insert(protocol);
}
void TestProtocolHandlerRegistryDelegate::CheckDefaultClientWithOS(
const std::string& protocol,
DefaultClientCallback callback) {
// Respond asynchronously to mimic the real behavior.
base::SingleThreadTaskRunner::GetCurrentDefault()->PostTask(
FROM_HERE, base::BindOnce(std::move(callback), true));
}
bool TestProtocolHandlerRegistryDelegate::ShouldRemoveHandlersNotInOS() {
return true;
}
bool TestProtocolHandlerRegistryDelegate::IsFakeRegisteredWithOS(
const std::string& protocol) {
return os_registered_protocols_.find(protocol) !=
os_registered_protocols_.end();
}
void TestProtocolHandlerRegistryDelegate::Reset() {
registered_protocols_.clear();
os_registered_protocols_.clear();
force_os_failure_ = false;
}
} // namespace custom_handlers