blob: 6e0b51d50e139bd75164f60ddbb9b2ad43669442 [file] [log] [blame]
// Copyright 2017 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.
#include "chrome/browser/spellchecker/test/spellcheck_content_browser_client.h"
#include "base/task/post_task.h"
#include "content/public/browser/browser_task_traits.h"
#include "content/public/browser/browser_thread.h"
#include "content/public/common/service_names.mojom.h"
#include "services/service_manager/public/cpp/bind_source_info.h"
namespace spellcheck {
SpellCheckContentBrowserClient::SpellCheckContentBrowserClient() {}
SpellCheckContentBrowserClient::~SpellCheckContentBrowserClient() {}
void SpellCheckContentBrowserClient::OverrideOnBindInterface(
const service_manager::BindSourceInfo& remote_info,
const std::string& name,
mojo::ScopedMessagePipeHandle* handle) {
if (name != spellcheck::mojom::SpellCheckPanelHost::Name_)
return;
spellcheck::mojom::SpellCheckPanelHostRequest request(std::move(*handle));
// Override the default SpellCheckHost interface.
auto ui_task_runner = base::CreateSingleThreadTaskRunnerWithTraits(
{content::BrowserThread::UI});
ui_task_runner->PostTask(
FROM_HERE,
base::BindOnce(
&SpellCheckContentBrowserClient::BindSpellCheckPanelHostRequest,
base::Unretained(this), base::Passed(&request), remote_info));
}
SpellCheckMockPanelHost*
SpellCheckContentBrowserClient::GetSpellCheckMockPanelHostForProcess(
content::RenderProcessHost* render_process_host) const {
for (const auto& host : hosts_) {
if (host->process_host() == render_process_host)
return host.get();
}
return nullptr;
}
void SpellCheckContentBrowserClient::RunUntilBind() {
base::RunLoop run_loop;
quit_on_bind_closure_ = run_loop.QuitClosure();
run_loop.Run();
}
void SpellCheckContentBrowserClient::BindSpellCheckPanelHostRequest(
spellcheck::mojom::SpellCheckPanelHostRequest request,
const service_manager::BindSourceInfo& source_info) {
content::RenderProcessHost* render_process_host =
content::RenderProcessHost::FromRendererInstanceId(
source_info.identity.instance_id());
auto spell_check_panel_host =
std::make_unique<SpellCheckMockPanelHost>(render_process_host);
spell_check_panel_host->SpellCheckPanelHostRequest(std::move(request));
hosts_.push_back(std::move(spell_check_panel_host));
std::move(quit_on_bind_closure_).Run();
}
} // namespace spellcheck