Index: extensions/utility/utility_handler.cc |
diff --git a/extensions/utility/utility_handler.cc b/extensions/utility/utility_handler.cc |
index 79daeab6e7f882c6b791ba435e1e5d5db207312c..2c399e982c50213a6728d689a74f1de8365171ef 100644 |
--- a/extensions/utility/utility_handler.cc |
+++ b/extensions/utility/utility_handler.cc |
@@ -10,14 +10,12 @@ |
#include "extensions/common/constants.h" |
#include "extensions/common/extension_l10n_util.h" |
#include "extensions/common/extension_unpacker.mojom.h" |
-#include "extensions/common/extension_utility_messages.h" |
#include "extensions/common/extensions_client.h" |
#include "extensions/common/manifest.h" |
+#include "extensions/common/manifest_parser.mojom.h" |
#include "extensions/common/update_manifest.h" |
#include "extensions/strings/grit/extensions_strings.h" |
#include "extensions/utility/unpacker.h" |
-#include "ipc/ipc_message.h" |
-#include "ipc/ipc_message_macros.h" |
#include "mojo/public/cpp/bindings/strong_binding.h" |
#include "services/service_manager/public/cpp/interface_registry.h" |
#include "third_party/zlib/google/zip.h" |
@@ -103,11 +101,31 @@ class ExtensionUnpackerImpl : public extensions::mojom::ExtensionUnpacker { |
DISALLOW_COPY_AND_ASSIGN(ExtensionUnpackerImpl); |
}; |
-} // namespace |
+class ManifestParserImpl : public extensions::mojom::ManifestParser { |
+ public: |
+ ManifestParserImpl() = default; |
+ ~ManifestParserImpl() override = default; |
-UtilityHandler::UtilityHandler() = default; |
+ static void Create(extensions::mojom::ManifestParserRequest request) { |
+ mojo::MakeStrongBinding(base::MakeUnique<ManifestParserImpl>(), |
+ std::move(request)); |
+ } |
-UtilityHandler::~UtilityHandler() = default; |
+ private: |
+ void Parse(const std::string& xml, const ParseCallback& callback) override { |
+ UpdateManifest manifest; |
+ if (manifest.Parse(xml)) { |
+ callback.Run(manifest.results()); |
+ } else { |
+ LOG(WARNING) << "Error parsing update manifest:\n" << manifest.errors(); |
+ callback.Run(base::nullopt); |
+ } |
+ } |
+ |
+ DISALLOW_COPY_AND_ASSIGN(ManifestParserImpl); |
+}; |
+ |
+} // namespace |
// static |
void UtilityHandler::UtilityThreadStarted() { |
@@ -127,30 +145,7 @@ void UtilityHandler::ExposeInterfacesToBrowser( |
return; |
registry->AddInterface(base::Bind(&ExtensionUnpackerImpl::Create)); |
-} |
- |
-bool UtilityHandler::OnMessageReceived(const IPC::Message& message) { |
- bool handled = true; |
- IPC_BEGIN_MESSAGE_MAP(UtilityHandler, message) |
- IPC_MESSAGE_HANDLER(ExtensionUtilityMsg_ParseUpdateManifest, |
- OnParseUpdateManifest) |
- IPC_MESSAGE_UNHANDLED(handled = false) |
- IPC_END_MESSAGE_MAP() |
- return handled; |
-} |
- |
-void UtilityHandler::OnParseUpdateManifest(const std::string& xml) { |
- UpdateManifest manifest; |
- if (!manifest.Parse(xml)) { |
- content::UtilityThread::Get()->Send( |
- new ExtensionUtilityHostMsg_ParseUpdateManifest_Failed( |
- manifest.errors())); |
- } else { |
- content::UtilityThread::Get()->Send( |
- new ExtensionUtilityHostMsg_ParseUpdateManifest_Succeeded( |
- manifest.results())); |
- } |
- content::UtilityThread::Get()->ReleaseProcessIfNeeded(); |
+ registry->AddInterface(base::Bind(&ManifestParserImpl::Create)); |
} |
} // namespace extensions |