| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "chrome/utility/extensions/extensions_handler.h" | 5 #include "chrome/utility/extensions/extensions_handler.h" |
| 6 | 6 |
| 7 #include <utility> | 7 #include <utility> |
| 8 | 8 |
| 9 #include "base/command_line.h" | 9 #include "base/command_line.h" |
| 10 #include "base/path_service.h" | 10 #include "base/path_service.h" |
| 11 #include "build/build_config.h" | 11 #include "build/build_config.h" |
| 12 #include "chrome/common/chrome_utility_messages.h" | 12 #include "chrome/common/chrome_utility_messages.h" |
| 13 #include "chrome/common/extensions/chrome_extensions_client.h" | 13 #include "chrome/common/extensions/chrome_extensions_client.h" |
| 14 #include "chrome/common/extensions/chrome_utility_extensions_messages.h" | 14 #include "chrome/common/extensions/chrome_utility_extensions_messages.h" |
| 15 #include "chrome/common/extensions/media_parser.mojom.h" |
| 15 #include "chrome/common/media_galleries/metadata_types.h" | 16 #include "chrome/common/media_galleries/metadata_types.h" |
| 16 #include "chrome/utility/chrome_content_utility_client.h" | 17 #include "chrome/utility/chrome_content_utility_client.h" |
| 17 #include "chrome/utility/media_galleries/ipc_data_source.h" | 18 #include "chrome/utility/media_galleries/ipc_data_source.h" |
| 18 #include "chrome/utility/media_galleries/media_metadata_parser.h" | 19 #include "chrome/utility/media_galleries/media_metadata_parser.h" |
| 19 #include "content/public/common/content_paths.h" | 20 #include "content/public/common/content_paths.h" |
| 20 #include "content/public/utility/utility_thread.h" | 21 #include "content/public/utility/utility_thread.h" |
| 21 #include "extensions/common/extension.h" | 22 #include "extensions/common/extension.h" |
| 22 #include "extensions/common/extension_utility_messages.h" | 23 #include "extensions/common/extension_utility_messages.h" |
| 23 #include "extensions/utility/unpacker.h" | 24 #include "extensions/utility/unpacker.h" |
| 24 #include "media/base/media.h" | 25 #include "media/base/media.h" |
| 26 #include "mojo/public/cpp/bindings/strong_binding.h" |
| 27 #include "services/service_manager/public/cpp/interface_registry.h" |
| 25 #include "ui/base/ui_base_switches.h" | 28 #include "ui/base/ui_base_switches.h" |
| 26 | 29 |
| 27 #if !defined(MEDIA_DISABLE_FFMPEG) | 30 #if !defined(MEDIA_DISABLE_FFMPEG) |
| 28 #include "media/base/media_file_checker.h" | 31 #include "media/base/media_file_checker.h" |
| 29 #endif | 32 #endif |
| 30 | 33 |
| 31 #if defined(OS_WIN) | 34 #if defined(OS_WIN) |
| 32 #include "chrome/utility/media_galleries/itunes_pref_parser_win.h" | 35 #include "chrome/utility/media_galleries/itunes_pref_parser_win.h" |
| 33 #include "components/wifi/wifi_service.h" | 36 #include "components/wifi/wifi_service.h" |
| 34 #endif // defined(OS_WIN) | 37 #endif // defined(OS_WIN) |
| (...skipping 19 matching lines...) Expand all Loading... |
| 54 | 57 |
| 55 void FinishParseMediaMetadata( | 58 void FinishParseMediaMetadata( |
| 56 metadata::MediaMetadataParser* /* parser */, | 59 metadata::MediaMetadataParser* /* parser */, |
| 57 const extensions::api::media_galleries::MediaMetadata& metadata, | 60 const extensions::api::media_galleries::MediaMetadata& metadata, |
| 58 const std::vector<metadata::AttachedImage>& attached_images) { | 61 const std::vector<metadata::AttachedImage>& attached_images) { |
| 59 Send(new ChromeUtilityHostMsg_ParseMediaMetadata_Finished( | 62 Send(new ChromeUtilityHostMsg_ParseMediaMetadata_Finished( |
| 60 true, *metadata.ToValue(), attached_images)); | 63 true, *metadata.ToValue(), attached_images)); |
| 61 ReleaseProcessIfNeeded(); | 64 ReleaseProcessIfNeeded(); |
| 62 } | 65 } |
| 63 | 66 |
| 67 class MediaParserImpl : public extensions::mojom::MediaParser { |
| 68 public: |
| 69 MediaParserImpl() = default; |
| 70 ~MediaParserImpl() override = default; |
| 71 |
| 72 static void Create(extensions::mojom::MediaParserRequest request) { |
| 73 mojo::MakeStrongBinding(base::MakeUnique<MediaParserImpl>(), |
| 74 std::move(request)); |
| 75 } |
| 76 |
| 77 private: |
| 78 // extensions::mojom::MediaParser: |
| 79 void CheckMediaFile(int64_t decode_time_ms, |
| 80 base::File file, |
| 81 const CheckMediaFileCallback& callback) override { |
| 82 #if !defined(MEDIA_DISABLE_FFMPEG) |
| 83 media::MediaFileChecker checker(std::move(file)); |
| 84 const bool check_success = |
| 85 checker.Start(base::TimeDelta::FromMilliseconds(decode_time_ms)); |
| 86 callback.Run(check_success); |
| 87 #else |
| 88 callback.Run(false); |
| 89 #endif |
| 90 // Caller is based on UtilityProcessHostClient and expects the |
| 91 // utility process to manage its own lifetime. TODO(noel): use |
| 92 // utility_process_mojo_client at the call-site to avoid the |
| 93 // need for this release call. |
| 94 ReleaseProcessIfNeeded(); |
| 95 } |
| 96 |
| 97 DISALLOW_COPY_AND_ASSIGN(MediaParserImpl); |
| 98 }; |
| 99 |
| 64 } // namespace | 100 } // namespace |
| 65 | 101 |
| 66 ExtensionsHandler::ExtensionsHandler(ChromeContentUtilityClient* utility_client) | 102 ExtensionsHandler::ExtensionsHandler(ChromeContentUtilityClient* utility_client) |
| 67 : utility_client_(utility_client) { | 103 : utility_client_(utility_client) { |
| 68 ExtensionsClient::Set(ChromeExtensionsClient::GetInstance()); | 104 ExtensionsClient::Set(ChromeExtensionsClient::GetInstance()); |
| 69 } | 105 } |
| 70 | 106 |
| 71 ExtensionsHandler::~ExtensionsHandler() { | 107 ExtensionsHandler::~ExtensionsHandler() { |
| 72 } | 108 } |
| 73 | 109 |
| 74 // static | 110 // static |
| 75 void ExtensionsHandler::PreSandboxStartup() { | 111 void ExtensionsHandler::PreSandboxStartup() { |
| 76 // Initialize media libraries for media file validation. | 112 // Initialize media libraries for media file validation. |
| 77 media::InitializeMediaLibrary(); | 113 media::InitializeMediaLibrary(); |
| 78 } | 114 } |
| 79 | 115 |
| 116 // static |
| 117 void ExtensionsHandler::ExposeInterfacesToBrowser( |
| 118 service_manager::InterfaceRegistry* registry, |
| 119 bool running_elevated) { |
| 120 // If our process runs with elevated privileges, only add elevated |
| 121 // Mojo services to the service_manager::InterfaceRegistry. |
| 122 if (running_elevated) |
| 123 return; |
| 124 |
| 125 registry->AddInterface(base::Bind(&MediaParserImpl::Create)); |
| 126 } |
| 127 |
| 80 bool ExtensionsHandler::OnMessageReceived(const IPC::Message& message) { | 128 bool ExtensionsHandler::OnMessageReceived(const IPC::Message& message) { |
| 81 bool handled = true; | 129 bool handled = true; |
| 82 IPC_BEGIN_MESSAGE_MAP(ExtensionsHandler, message) | 130 IPC_BEGIN_MESSAGE_MAP(ExtensionsHandler, message) |
| 83 IPC_MESSAGE_HANDLER(ChromeUtilityMsg_CheckMediaFile, OnCheckMediaFile) | |
| 84 IPC_MESSAGE_HANDLER(ChromeUtilityMsg_ParseMediaMetadata, | 131 IPC_MESSAGE_HANDLER(ChromeUtilityMsg_ParseMediaMetadata, |
| 85 OnParseMediaMetadata) | 132 OnParseMediaMetadata) |
| 86 | 133 |
| 87 #if defined(OS_WIN) | 134 #if defined(OS_WIN) |
| 88 IPC_MESSAGE_HANDLER(ChromeUtilityMsg_ParseITunesPrefXml, | 135 IPC_MESSAGE_HANDLER(ChromeUtilityMsg_ParseITunesPrefXml, |
| 89 OnParseITunesPrefXml) | 136 OnParseITunesPrefXml) |
| 90 #endif // defined(OS_WIN) | 137 #endif // defined(OS_WIN) |
| 91 | 138 |
| 92 #if defined(OS_WIN) || defined(OS_MACOSX) | 139 #if defined(OS_WIN) || defined(OS_MACOSX) |
| 93 IPC_MESSAGE_HANDLER(ChromeUtilityMsg_ParseITunesLibraryXmlFile, | 140 IPC_MESSAGE_HANDLER(ChromeUtilityMsg_ParseITunesLibraryXmlFile, |
| 94 OnParseITunesLibraryXmlFile) | 141 OnParseITunesLibraryXmlFile) |
| 95 IPC_MESSAGE_HANDLER(ChromeUtilityMsg_ParsePicasaPMPDatabase, | 142 IPC_MESSAGE_HANDLER(ChromeUtilityMsg_ParsePicasaPMPDatabase, |
| 96 OnParsePicasaPMPDatabase) | 143 OnParsePicasaPMPDatabase) |
| 97 IPC_MESSAGE_HANDLER(ChromeUtilityMsg_IndexPicasaAlbumsContents, | 144 IPC_MESSAGE_HANDLER(ChromeUtilityMsg_IndexPicasaAlbumsContents, |
| 98 OnIndexPicasaAlbumsContents) | 145 OnIndexPicasaAlbumsContents) |
| 99 #endif // defined(OS_WIN) || defined(OS_MACOSX) | 146 #endif // defined(OS_WIN) || defined(OS_MACOSX) |
| 100 | 147 |
| 101 #if defined(OS_WIN) | 148 #if defined(OS_WIN) |
| 102 IPC_MESSAGE_HANDLER(ChromeUtilityHostMsg_GetWiFiCredentials, | 149 IPC_MESSAGE_HANDLER(ChromeUtilityHostMsg_GetWiFiCredentials, |
| 103 OnGetWiFiCredentials) | 150 OnGetWiFiCredentials) |
| 104 #endif // defined(OS_WIN) | 151 #endif // defined(OS_WIN) |
| 105 | 152 |
| 106 IPC_MESSAGE_UNHANDLED(handled = false) | 153 IPC_MESSAGE_UNHANDLED(handled = false) |
| 107 IPC_END_MESSAGE_MAP() | 154 IPC_END_MESSAGE_MAP() |
| 108 return handled || utility_handler_.OnMessageReceived(message); | 155 return handled || utility_handler_.OnMessageReceived(message); |
| 109 } | 156 } |
| 110 | 157 |
| 111 void ExtensionsHandler::OnCheckMediaFile( | |
| 112 int64_t milliseconds_of_decoding, | |
| 113 const IPC::PlatformFileForTransit& media_file) { | |
| 114 #if !defined(MEDIA_DISABLE_FFMPEG) | |
| 115 media::MediaFileChecker checker( | |
| 116 IPC::PlatformFileForTransitToFile(media_file)); | |
| 117 const bool check_success = checker.Start( | |
| 118 base::TimeDelta::FromMilliseconds(milliseconds_of_decoding)); | |
| 119 Send(new ChromeUtilityHostMsg_CheckMediaFile_Finished(check_success)); | |
| 120 #else | |
| 121 Send(new ChromeUtilityHostMsg_CheckMediaFile_Finished(false)); | |
| 122 #endif | |
| 123 ReleaseProcessIfNeeded(); | |
| 124 } | |
| 125 | |
| 126 void ExtensionsHandler::OnParseMediaMetadata(const std::string& mime_type, | 158 void ExtensionsHandler::OnParseMediaMetadata(const std::string& mime_type, |
| 127 int64_t total_size, | 159 int64_t total_size, |
| 128 bool get_attached_images) { | 160 bool get_attached_images) { |
| 129 // Only one IPCDataSource may be created and added to the list of handlers. | 161 // Only one IPCDataSource may be created and added to the list of handlers. |
| 130 std::unique_ptr<metadata::IPCDataSource> source( | 162 std::unique_ptr<metadata::IPCDataSource> source( |
| 131 new metadata::IPCDataSource(total_size)); | 163 new metadata::IPCDataSource(total_size)); |
| 132 metadata::MediaMetadataParser* parser = new metadata::MediaMetadataParser( | 164 metadata::MediaMetadataParser* parser = new metadata::MediaMetadataParser( |
| 133 source.get(), mime_type, get_attached_images); | 165 source.get(), mime_type, get_attached_images); |
| 134 utility_client_->AddHandler(std::move(source)); | 166 utility_client_->AddHandler(std::move(source)); |
| 135 parser->Start(base::Bind(&FinishParseMediaMetadata, base::Owned(parser))); | 167 parser->Start(base::Bind(&FinishParseMediaMetadata, base::Owned(parser))); |
| (...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 199 | 231 |
| 200 std::string key_data; | 232 std::string key_data; |
| 201 std::string error; | 233 std::string error; |
| 202 wifi_service->GetKeyFromSystem(network_guid, &key_data, &error); | 234 wifi_service->GetKeyFromSystem(network_guid, &key_data, &error); |
| 203 | 235 |
| 204 Send(new ChromeUtilityHostMsg_GotWiFiCredentials(key_data, error.empty())); | 236 Send(new ChromeUtilityHostMsg_GotWiFiCredentials(key_data, error.empty())); |
| 205 } | 237 } |
| 206 #endif // defined(OS_WIN) | 238 #endif // defined(OS_WIN) |
| 207 | 239 |
| 208 } // namespace extensions | 240 } // namespace extensions |
| OLD | NEW |