Index: chrome/browser/chrome_content_browser_client.cc |
diff --git a/chrome/browser/chrome_content_browser_client.cc b/chrome/browser/chrome_content_browser_client.cc |
index 9b0b2bbac62e8c23b2bf8926361a37cfd785ac39..32015980a62591cde77dbe93cd799d6a7a63d8ee 100644 |
--- a/chrome/browser/chrome_content_browser_client.cc |
+++ b/chrome/browser/chrome_content_browser_client.cc |
@@ -85,6 +85,7 @@ |
#include "chrome/browser/tab_contents/tab_util.h" |
#include "chrome/browser/tracing/chrome_tracing_delegate.h" |
#include "chrome/browser/translate/chrome_translate_client.h" |
+#include "chrome/browser/ui/ash/ash_util.h" |
#include "chrome/browser/ui/blocked_content/blocked_window_params.h" |
#include "chrome/browser/ui/blocked_content/popup_blocker_tab_helper.h" |
#include "chrome/browser/ui/browser_navigator.h" |
@@ -222,7 +223,6 @@ |
#include "chrome/browser/chromeos/arc/intent_helper/arc_navigation_throttle.h" |
#include "chrome/browser/chromeos/attestation/platform_verification_impl.h" |
#include "chrome/browser/chromeos/chrome_browser_main_chromeos.h" |
-#include "chrome/browser/chromeos/chrome_interface_factory.h" |
#include "chrome/browser/chromeos/drive/fileapi/file_system_backend_delegate.h" |
#include "chrome/browser/chromeos/file_manager/app_id.h" |
#include "chrome/browser/chromeos/file_system_provider/fileapi/backend_delegate.h" |
@@ -233,10 +233,16 @@ |
#include "chrome/browser/chromeos/login/startup_utils.h" |
#include "chrome/browser/chromeos/policy/browser_policy_connector_chromeos.h" |
#include "chrome/browser/chromeos/system/input_device_settings.h" |
+#include "chrome/browser/profiles/profile_manager.h" |
#include "chrome/browser/ui/ash/ash_util.h" |
+#include "chrome/browser/ui/browser_commands.h" |
#include "chrome/browser/ui/browser_dialogs.h" |
+#include "chrome/browser/ui/browser_finder.h" |
#include "chromeos/chromeos_switches.h" |
#include "components/user_manager/user_manager.h" |
+#include "mash/public/interfaces/launchable.mojom.h" |
+#include "services/service_manager/public/cpp/interface_factory.h" |
+#include "services/service_manager/public/interfaces/interface_provider_spec.mojom.h" |
#elif defined(OS_LINUX) |
#include "chrome/browser/chrome_browser_main_linux.h" |
#elif defined(OS_ANDROID) |
@@ -462,6 +468,71 @@ enum AppLoadedInTabSource { |
APP_LOADED_IN_TAB_SOURCE_MAX |
}; |
+#if defined(OS_CHROMEOS) |
+ |
+const char kChromeServiceName[] = "chrome"; |
sky
2017/02/15 00:35:26
Add description.
Ken Rockot(use gerrit already)
2017/02/15 01:38:05
Done
|
+ |
+class ChromeService |
sky
2017/02/15 00:35:26
Please add description, also, I would be inclined
Ken Rockot(use gerrit already)
2017/02/15 01:38:05
Done
|
+ : public service_manager::Service, |
+ public mash::mojom::Launchable, |
+ public service_manager::InterfaceFactory<mash::mojom::Launchable> { |
+ public: |
+ ChromeService() |
+ : interfaces_(service_manager::mojom::kServiceManager_ConnectorSpec) { |
+ interfaces_.AddInterface<mash::mojom::Launchable>(this); |
+ } |
+ ~ChromeService() override {} |
+ |
+ static std::unique_ptr<service_manager::Service> CreateService() { |
+ return base::MakeUnique<ChromeService>(); |
+ } |
+ |
+ private: |
+ void CreateNewWindowImpl(bool is_incognito) { |
+ Profile* profile = ProfileManager::GetActiveUserProfile(); |
+ chrome::NewEmptyWindow(is_incognito ? profile->GetOffTheRecordProfile() |
+ : profile); |
+ } |
+ |
+ // service_manager::Service: |
+ void OnBindInterface(const service_manager::ServiceInfo& remote_info, |
+ const std::string& name, |
+ mojo::ScopedMessagePipeHandle handle) override { |
+ interfaces_.BindInterface(name, std::move(handle)); |
+ } |
+ |
+ // mash::mojom::Launchable: |
+ void Launch(uint32_t what, mash::mojom::LaunchMode how) override { |
+ if (how != mash::mojom::LaunchMode::MAKE_NEW) { |
+ LOG(ERROR) << "Unable to handle Launch request with how = " << how; |
+ return; |
+ } |
+ switch (what) { |
+ case mash::mojom::kWindow: |
+ CreateNewWindowImpl(false /* is_incognito */); |
+ break; |
+ case mash::mojom::kIncognitoWindow: |
+ CreateNewWindowImpl(true /* is_incognito */); |
+ break; |
+ default: |
+ NOTREACHED(); |
+ } |
+ } |
+ |
+ // mojo::InterfaceFactory<mash::mojom::Launchable>: |
+ void Create(const service_manager::Identity& remote_identity, |
+ mash::mojom::LaunchableRequest request) override { |
+ bindings_.AddBinding(this, std::move(request)); |
+ } |
+ |
+ service_manager::InterfaceRegistry interfaces_; |
+ mojo::BindingSet<mash::mojom::Launchable> bindings_; |
+ |
+ DISALLOW_COPY_AND_ASSIGN(ChromeService); |
+}; |
+ |
+#endif // defined(OS_CHROMEOS) |
+ |
// Returns a copy of the given url with its host set to given host and path set |
// to given path. Other parts of the url will be the same. |
GURL ReplaceURLHostAndPath(const GURL& url, |
@@ -3107,16 +3178,29 @@ void ChromeContentBrowserClient::RegisterInProcessServices( |
services->insert(std::make_pair("media", info)); |
#endif |
#if defined(OS_CHROMEOS) |
- content::ServiceManagerConnection::GetForProcess()->AddConnectionFilter( |
- base::MakeUnique<chromeos::ChromeInterfaceFactory>()); |
+ { |
+ content::ServiceInfo info; |
+ info.factory = base::Bind(&ChromeService::CreateService); |
+ info.task_runner = base::ThreadTaskRunnerHandle::Get(); |
+ services->insert(std::make_pair(kChromeServiceName, info)); |
+ } |
+ |
{ |
content::ServiceInfo info; |
info.factory = base::Bind([] { |
return std::unique_ptr<service_manager::Service>( |
base::MakeUnique<PreferencesConnectionManager>()); |
}); |
+ info.task_runner = base::ThreadTaskRunnerHandle::Get(); |
services->insert(std::make_pair(prefs::mojom::kServiceName, info)); |
} |
+ |
+ if (!chrome::IsRunningInMash()) { |
+ content::ServiceInfo info; |
+ info.factory = base::Bind(&ash_util::CreateEmbeddedAshService, |
+ base::ThreadTaskRunnerHandle::Get()); |
+ services->insert(std::make_pair("ash", info)); |
+ } |
#endif // OS_CHROMEOS |
} |
@@ -3138,6 +3222,8 @@ ChromeContentBrowserClient::GetServiceManifestOverlay(base::StringPiece name) { |
id = IDR_CHROME_CONTENT_BROWSER_MANIFEST_OVERLAY; |
else if (name == content::mojom::kGpuServiceName) |
id = IDR_CHROME_CONTENT_GPU_MANIFEST_OVERLAY; |
+ else if (name == content::mojom::kPackagedServicesServiceName) |
+ id = IDR_CHROME_CONTENT_PACKAGED_SERVICES_MANIFEST_OVERLAY; |
else if (name == content::mojom::kPluginServiceName) |
id = IDR_CHROME_CONTENT_PLUGIN_MANIFEST_OVERLAY; |
else if (name == content::mojom::kRendererServiceName) |