1 // Copyright 2015 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.
5 #include "extensions/browser/mojo/service_registration.h"
10 #include "base/command_line.h"
11 #include "content/public/browser/render_frame_host.h"
12 #include "content/public/browser/render_process_host.h"
13 #include "content/public/browser/site_instance.h"
14 #include "content/public/common/service_registry.h"
15 #include "extensions/browser/api/serial/serial_service_factory.h"
16 #include "extensions/browser/extension_registry.h"
17 #include "extensions/browser/extensions_browser_client.h"
18 #include "extensions/browser/mojo/keep_alive_impl.h"
19 #include "extensions/browser/process_map.h"
20 #include "extensions/common/constants.h"
21 #include "extensions/common/extension_api.h"
22 #include "extensions/common/switches.h"
24 namespace extensions
{
27 bool ExtensionHasPermission(const Extension
* extension
,
28 content::RenderProcessHost
* render_process_host
,
29 const std::string
& permission_name
) {
30 Feature::Context context
=
31 ProcessMap::Get(render_process_host
->GetBrowserContext())
32 ->GetMostLikelyContextType(extension
, render_process_host
->GetID());
34 return ExtensionAPI::GetSharedInstance()
35 ->IsAvailable(permission_name
, extension
, context
, extension
->url())
41 void RegisterServicesForFrame(content::RenderFrameHost
* render_frame_host
,
42 const Extension
* extension
) {
45 content::ServiceRegistry
* service_registry
=
46 render_frame_host
->GetServiceRegistry();
47 if (base::CommandLine::ForCurrentProcess()->HasSwitch(
48 switches::kEnableMojoSerialService
)) {
49 if (ExtensionHasPermission(extension
, render_frame_host
->GetProcess(),
51 service_registry
->AddService(base::Bind(&BindToSerialServiceRequest
));
54 service_registry
->AddService(base::Bind(
55 KeepAliveImpl::Create
,
56 render_frame_host
->GetProcess()->GetBrowserContext(), extension
));
59 } // namespace extensions