Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(9465)

Unified Diff: chrome/utility/extensions/extensions_handler.cc

Issue 2615423002: Convert utility process ParseMediaMetadata IPC to mojo (Closed)
Patch Set: Security review comments. Created 3 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/utility/extensions/extensions_handler.cc
diff --git a/chrome/utility/extensions/extensions_handler.cc b/chrome/utility/extensions/extensions_handler.cc
index 787a8b9ef20161ec71ea57e28608859ad392c90b..9992d42ec90fe10e797ef4849fae210e8b7ba3ff 100644
--- a/chrome/utility/extensions/extensions_handler.cc
+++ b/chrome/utility/extensions/extensions_handler.cc
@@ -12,6 +12,7 @@
#include "chrome/common/chrome_utility_messages.h"
#include "chrome/common/extensions/chrome_extensions_client.h"
#include "chrome/common/extensions/chrome_utility_extensions_messages.h"
+#include "chrome/common/extensions/media_parser.mojom.h"
#include "chrome/common/media_galleries/metadata_types.h"
#include "chrome/utility/chrome_content_utility_client.h"
#include "chrome/utility/media_galleries/ipc_data_source.h"
@@ -22,6 +23,8 @@
#include "extensions/common/extension_utility_messages.h"
#include "extensions/utility/unpacker.h"
#include "media/base/media.h"
+#include "mojo/public/cpp/bindings/strong_binding.h"
+#include "services/service_manager/public/cpp/interface_registry.h"
#include "ui/base/ui_base_switches.h"
#if !defined(MEDIA_DISABLE_FFMPEG)
@@ -40,8 +43,6 @@
#include "chrome/utility/media_galleries/picasa_albums_indexer.h"
#endif // defined(OS_WIN) || defined(OS_MACOSX)
-namespace extensions {
-
namespace {
bool Send(IPC::Message* message) {
@@ -52,19 +53,53 @@ void ReleaseProcessIfNeeded() {
content::UtilityThread::Get()->ReleaseProcessIfNeeded();
}
-void FinishParseMediaMetadata(
- metadata::MediaMetadataParser* /* parser */,
- const extensions::api::media_galleries::MediaMetadata& metadata,
- const std::vector<metadata::AttachedImage>& attached_images) {
- Send(new ChromeUtilityHostMsg_ParseMediaMetadata_Finished(
- true, *metadata.ToValue(), attached_images));
- ReleaseProcessIfNeeded();
-}
+class MediaParserImpl : public extensions::mojom::MediaParser {
+ public:
+ static void Create(ChromeContentUtilityClient* utility_client,
+ extensions::mojom::MediaParserRequest request) {
+ mojo::MakeStrongBinding(base::MakeUnique<MediaParserImpl>(utility_client),
+ std::move(request));
+ }
+
+ explicit MediaParserImpl(ChromeContentUtilityClient* utility_client)
+ : utility_client_(utility_client) {}
+
+ ~MediaParserImpl() override = default;
+
+ private:
+ // extensions::mojom::MediaParser:
+ void ParseMediaMetadata(const std::string& mime_type,
+ int64_t total_size,
+ bool get_attached_images,
+ const ParseMediaMetadataCallback& callback) override {
+ // Only one IPCDataSource may be created and added to the list of handlers.
+ auto source = base::MakeUnique<metadata::IPCDataSource>(total_size);
+ metadata::MediaMetadataParser* parser = new metadata::MediaMetadataParser(
+ source.get(), mime_type, get_attached_images);
+ utility_client_->AddHandler(std::move(source));
+ parser->Start(base::Bind(&MediaParserImpl::ParseMediaMetadataDone, callback,
+ base::Owned(parser)));
+ }
+
+ static void ParseMediaMetadataDone(
+ const ParseMediaMetadataCallback& callback,
+ metadata::MediaMetadataParser* /* parser */,
+ const extensions::api::media_galleries::MediaMetadata& metadata,
+ const std::vector<metadata::AttachedImage>& attached_images) {
+ callback.Run(true, metadata.ToValue(), attached_images);
+ ReleaseProcessIfNeeded();
+ }
+
+ ChromeContentUtilityClient* const utility_client_;
+
+ DISALLOW_COPY_AND_ASSIGN(MediaParserImpl);
+};
} // namespace
-ExtensionsHandler::ExtensionsHandler(ChromeContentUtilityClient* utility_client)
- : utility_client_(utility_client) {
+namespace extensions {
+
+ExtensionsHandler::ExtensionsHandler() {
ExtensionsClient::Set(ChromeExtensionsClient::GetInstance());
}
@@ -77,12 +112,23 @@ void ExtensionsHandler::PreSandboxStartup() {
media::InitializeMediaLibrary();
}
+// static
+void ExtensionsHandler::ExposeInterfacesToBrowser(
+ service_manager::InterfaceRegistry* registry,
+ ChromeContentUtilityClient* utility_client,
+ bool running_elevated) {
+ // If our process runs with elevated privileges, only add elevated
+ // Mojo services to the interface registry.
+ if (running_elevated)
+ return;
+
+ registry->AddInterface(base::Bind(&MediaParserImpl::Create, utility_client));
+}
+
bool ExtensionsHandler::OnMessageReceived(const IPC::Message& message) {
bool handled = true;
IPC_BEGIN_MESSAGE_MAP(ExtensionsHandler, message)
IPC_MESSAGE_HANDLER(ChromeUtilityMsg_CheckMediaFile, OnCheckMediaFile)
- IPC_MESSAGE_HANDLER(ChromeUtilityMsg_ParseMediaMetadata,
- OnParseMediaMetadata)
#if defined(OS_WIN)
IPC_MESSAGE_HANDLER(ChromeUtilityMsg_ParseITunesPrefXml,
@@ -105,6 +151,7 @@ bool ExtensionsHandler::OnMessageReceived(const IPC::Message& message) {
IPC_MESSAGE_UNHANDLED(handled = false)
IPC_END_MESSAGE_MAP()
+
return handled || utility_handler_.OnMessageReceived(message);
}
@@ -123,18 +170,6 @@ void ExtensionsHandler::OnCheckMediaFile(
ReleaseProcessIfNeeded();
}
-void ExtensionsHandler::OnParseMediaMetadata(const std::string& mime_type,
- int64_t total_size,
- bool get_attached_images) {
- // Only one IPCDataSource may be created and added to the list of handlers.
- std::unique_ptr<metadata::IPCDataSource> source(
- new metadata::IPCDataSource(total_size));
- metadata::MediaMetadataParser* parser = new metadata::MediaMetadataParser(
- source.get(), mime_type, get_attached_images);
- utility_client_->AddHandler(std::move(source));
- parser->Start(base::Bind(&FinishParseMediaMetadata, base::Owned(parser)));
-}
-
#if defined(OS_WIN)
void ExtensionsHandler::OnParseITunesPrefXml(
const std::string& itunes_xml_data) {
« no previous file with comments | « chrome/utility/extensions/extensions_handler.h ('k') | mojo/public/tools/bindings/chromium_bindings_configuration.gni » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698