| // 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 |