| 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" |
| (...skipping 28 matching lines...) Expand all Loading... |
| 39 | 39 |
| 40 #if defined(OS_WIN) || defined(OS_MACOSX) | 40 #if defined(OS_WIN) || defined(OS_MACOSX) |
| 41 #include "chrome/utility/media_galleries/iapps_xml_utils.h" | 41 #include "chrome/utility/media_galleries/iapps_xml_utils.h" |
| 42 #include "chrome/utility/media_galleries/itunes_library_parser.h" | 42 #include "chrome/utility/media_galleries/itunes_library_parser.h" |
| 43 #include "chrome/utility/media_galleries/picasa_album_table_reader.h" | 43 #include "chrome/utility/media_galleries/picasa_album_table_reader.h" |
| 44 #include "chrome/utility/media_galleries/picasa_albums_indexer.h" | 44 #include "chrome/utility/media_galleries/picasa_albums_indexer.h" |
| 45 #endif // defined(OS_WIN) || defined(OS_MACOSX) | 45 #endif // defined(OS_WIN) || defined(OS_MACOSX) |
| 46 | 46 |
| 47 namespace { | 47 namespace { |
| 48 | 48 |
| 49 void ReleaseProcessIfNeeded() { | |
| 50 content::UtilityThread::Get()->ReleaseProcessIfNeeded(); | |
| 51 } | |
| 52 | |
| 53 class MediaParserImpl : public extensions::mojom::MediaParser { | 49 class MediaParserImpl : public extensions::mojom::MediaParser { |
| 54 public: | 50 public: |
| 55 static void Create(ChromeContentUtilityClient* utility_client, | 51 MediaParserImpl() = default; |
| 56 extensions::mojom::MediaParserRequest request) { | 52 ~MediaParserImpl() override = default; |
| 57 mojo::MakeStrongBinding(base::MakeUnique<MediaParserImpl>(utility_client), | 53 |
| 54 static void Create(extensions::mojom::MediaParserRequest request) { |
| 55 mojo::MakeStrongBinding(base::MakeUnique<MediaParserImpl>(), |
| 58 std::move(request)); | 56 std::move(request)); |
| 59 } | 57 } |
| 60 | 58 |
| 61 explicit MediaParserImpl(ChromeContentUtilityClient* utility_client) | |
| 62 : utility_client_(utility_client) {} | |
| 63 | |
| 64 ~MediaParserImpl() override = default; | |
| 65 | |
| 66 private: | 59 private: |
| 67 // extensions::mojom::MediaParser: | 60 // extensions::mojom::MediaParser: |
| 68 void ParseMediaMetadata(const std::string& mime_type, | 61 void ParseMediaMetadata( |
| 69 int64_t total_size, | 62 const std::string& mime_type, |
| 70 bool get_attached_images, | 63 int64_t total_size, |
| 71 const ParseMediaMetadataCallback& callback) override { | 64 bool get_attached_images, |
| 72 // Only one IPCDataSource may be created and added to the list of handlers. | 65 extensions::mojom::MediaDataSourcePtr media_data_source, |
| 73 auto source = base::MakeUnique<metadata::IPCDataSource>(total_size); | 66 const ParseMediaMetadataCallback& callback) override { |
| 67 auto source = base::MakeUnique<metadata::IPCDataSource>( |
| 68 std::move(media_data_source), total_size); |
| 74 metadata::MediaMetadataParser* parser = new metadata::MediaMetadataParser( | 69 metadata::MediaMetadataParser* parser = new metadata::MediaMetadataParser( |
| 75 source.get(), mime_type, get_attached_images); | 70 std::move(source), mime_type, get_attached_images); |
| 76 utility_client_->AddHandler(std::move(source)); | |
| 77 parser->Start(base::Bind(&MediaParserImpl::ParseMediaMetadataDone, callback, | 71 parser->Start(base::Bind(&MediaParserImpl::ParseMediaMetadataDone, callback, |
| 78 base::Owned(parser))); | 72 base::Owned(parser))); |
| 79 } | 73 } |
| 80 | 74 |
| 81 static void ParseMediaMetadataDone( | 75 static void ParseMediaMetadataDone( |
| 82 const ParseMediaMetadataCallback& callback, | 76 const ParseMediaMetadataCallback& callback, |
| 83 metadata::MediaMetadataParser* /* parser */, | 77 metadata::MediaMetadataParser* /* parser */, |
| 84 const extensions::api::media_galleries::MediaMetadata& metadata, | 78 const extensions::api::media_galleries::MediaMetadata& metadata, |
| 85 const std::vector<metadata::AttachedImage>& attached_images) { | 79 const std::vector<metadata::AttachedImage>& attached_images) { |
| 86 callback.Run(true, metadata.ToValue(), attached_images); | 80 callback.Run(true, metadata.ToValue(), attached_images); |
| 87 ReleaseProcessIfNeeded(); | |
| 88 } | 81 } |
| 89 | 82 |
| 90 void CheckMediaFile(base::TimeDelta decode_time, | 83 void CheckMediaFile(base::TimeDelta decode_time, |
| 91 base::File file, | 84 base::File file, |
| 92 const CheckMediaFileCallback& callback) override { | 85 const CheckMediaFileCallback& callback) override { |
| 93 #if !defined(MEDIA_DISABLE_FFMPEG) | 86 #if !defined(MEDIA_DISABLE_FFMPEG) |
| 94 media::MediaFileChecker checker(std::move(file)); | 87 media::MediaFileChecker checker(std::move(file)); |
| 95 callback.Run(checker.Start(decode_time)); | 88 callback.Run(checker.Start(decode_time)); |
| 96 #else | 89 #else |
| 97 callback.Run(false); | 90 callback.Run(false); |
| 98 #endif | 91 #endif |
| 99 } | 92 } |
| 100 | 93 |
| 101 ChromeContentUtilityClient* const utility_client_; | |
| 102 | |
| 103 DISALLOW_COPY_AND_ASSIGN(MediaParserImpl); | 94 DISALLOW_COPY_AND_ASSIGN(MediaParserImpl); |
| 104 }; | 95 }; |
| 105 | 96 |
| 106 #if defined(OS_WIN) | 97 #if defined(OS_WIN) |
| 107 class WiFiCredentialsGetterImpl | 98 class WiFiCredentialsGetterImpl |
| 108 : public extensions::mojom::WiFiCredentialsGetter { | 99 : public extensions::mojom::WiFiCredentialsGetter { |
| 109 public: | 100 public: |
| 110 WiFiCredentialsGetterImpl() = default; | 101 WiFiCredentialsGetterImpl() = default; |
| 111 ~WiFiCredentialsGetterImpl() override = default; | 102 ~WiFiCredentialsGetterImpl() override = default; |
| 112 | 103 |
| (...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 156 | 147 |
| 157 // static | 148 // static |
| 158 void ExtensionsHandler::PreSandboxStartup() { | 149 void ExtensionsHandler::PreSandboxStartup() { |
| 159 // Initialize media libraries for media file validation. | 150 // Initialize media libraries for media file validation. |
| 160 media::InitializeMediaLibrary(); | 151 media::InitializeMediaLibrary(); |
| 161 } | 152 } |
| 162 | 153 |
| 163 // static | 154 // static |
| 164 void ExtensionsHandler::ExposeInterfacesToBrowser( | 155 void ExtensionsHandler::ExposeInterfacesToBrowser( |
| 165 service_manager::InterfaceRegistry* registry, | 156 service_manager::InterfaceRegistry* registry, |
| 166 ChromeContentUtilityClient* utility_client, | |
| 167 bool running_elevated) { | 157 bool running_elevated) { |
| 168 // If our process runs with elevated privileges, only add elevated Mojo | 158 // If our process runs with elevated privileges, only add elevated Mojo |
| 169 // services to the interface registry. | 159 // services to the interface registry. |
| 170 if (running_elevated) { | 160 if (running_elevated) { |
| 171 #if defined(OS_WIN) | 161 #if defined(OS_WIN) |
| 172 registry->AddInterface(base::Bind(&WiFiCredentialsGetterImpl::Create)); | 162 registry->AddInterface(base::Bind(&WiFiCredentialsGetterImpl::Create)); |
| 173 #endif | 163 #endif |
| 174 return; | 164 return; |
| 175 } | 165 } |
| 176 | 166 |
| 177 registry->AddInterface(base::Bind(&MediaParserImpl::Create, utility_client)); | 167 registry->AddInterface(base::Bind(&MediaParserImpl::Create)); |
| 178 } | 168 } |
| 179 | 169 |
| 180 bool ExtensionsHandler::OnMessageReceived(const IPC::Message& message) { | 170 bool ExtensionsHandler::OnMessageReceived(const IPC::Message& message) { |
| 181 bool handled = true; | 171 bool handled = true; |
| 182 IPC_BEGIN_MESSAGE_MAP(ExtensionsHandler, message) | 172 IPC_BEGIN_MESSAGE_MAP(ExtensionsHandler, message) |
| 183 #if defined(OS_WIN) | 173 #if defined(OS_WIN) |
| 184 IPC_MESSAGE_HANDLER(ChromeUtilityMsg_ParseITunesPrefXml, | 174 IPC_MESSAGE_HANDLER(ChromeUtilityMsg_ParseITunesPrefXml, |
| 185 OnParseITunesPrefXml) | 175 OnParseITunesPrefXml) |
| 186 #endif // defined(OS_WIN) | 176 #endif // defined(OS_WIN) |
| 187 | 177 |
| (...skipping 12 matching lines...) Expand all Loading... |
| 200 return handled || utility_handler_.OnMessageReceived(message); | 190 return handled || utility_handler_.OnMessageReceived(message); |
| 201 } | 191 } |
| 202 | 192 |
| 203 #if defined(OS_WIN) | 193 #if defined(OS_WIN) |
| 204 void ExtensionsHandler::OnParseITunesPrefXml( | 194 void ExtensionsHandler::OnParseITunesPrefXml( |
| 205 const std::string& itunes_xml_data) { | 195 const std::string& itunes_xml_data) { |
| 206 base::FilePath library_path( | 196 base::FilePath library_path( |
| 207 itunes::FindLibraryLocationInPrefXml(itunes_xml_data)); | 197 itunes::FindLibraryLocationInPrefXml(itunes_xml_data)); |
| 208 content::UtilityThread::Get()->Send( | 198 content::UtilityThread::Get()->Send( |
| 209 new ChromeUtilityHostMsg_GotITunesDirectory(library_path)); | 199 new ChromeUtilityHostMsg_GotITunesDirectory(library_path)); |
| 210 ReleaseProcessIfNeeded(); | 200 content::UtilityThread::Get()->ReleaseProcessIfNeeded(); |
| 211 } | 201 } |
| 212 #endif // defined(OS_WIN) | 202 #endif // defined(OS_WIN) |
| 213 | 203 |
| 214 #if defined(OS_WIN) || defined(OS_MACOSX) | 204 #if defined(OS_WIN) || defined(OS_MACOSX) |
| 215 void ExtensionsHandler::OnParseITunesLibraryXmlFile( | 205 void ExtensionsHandler::OnParseITunesLibraryXmlFile( |
| 216 const IPC::PlatformFileForTransit& itunes_library_file) { | 206 const IPC::PlatformFileForTransit& itunes_library_file) { |
| 217 itunes::ITunesLibraryParser parser; | 207 itunes::ITunesLibraryParser parser; |
| 218 base::File file = IPC::PlatformFileForTransitToFile(itunes_library_file); | 208 base::File file = IPC::PlatformFileForTransitToFile(itunes_library_file); |
| 219 bool result = parser.Parse(iapps::ReadFileAsString(std::move(file))); | 209 bool result = parser.Parse(iapps::ReadFileAsString(std::move(file))); |
| 220 content::UtilityThread::Get()->Send( | 210 content::UtilityThread::Get()->Send( |
| 221 new ChromeUtilityHostMsg_GotITunesLibrary(result, parser.library())); | 211 new ChromeUtilityHostMsg_GotITunesLibrary(result, parser.library())); |
| 222 ReleaseProcessIfNeeded(); | 212 content::UtilityThread::Get()->ReleaseProcessIfNeeded(); |
| 223 } | 213 } |
| 224 | 214 |
| 225 void ExtensionsHandler::OnParsePicasaPMPDatabase( | 215 void ExtensionsHandler::OnParsePicasaPMPDatabase( |
| 226 const picasa::AlbumTableFilesForTransit& album_table_files) { | 216 const picasa::AlbumTableFilesForTransit& album_table_files) { |
| 227 picasa::AlbumTableFiles files; | 217 picasa::AlbumTableFiles files; |
| 228 files.indicator_file = | 218 files.indicator_file = |
| 229 IPC::PlatformFileForTransitToFile(album_table_files.indicator_file); | 219 IPC::PlatformFileForTransitToFile(album_table_files.indicator_file); |
| 230 files.category_file = | 220 files.category_file = |
| 231 IPC::PlatformFileForTransitToFile(album_table_files.category_file); | 221 IPC::PlatformFileForTransitToFile(album_table_files.category_file); |
| 232 files.date_file = | 222 files.date_file = |
| 233 IPC::PlatformFileForTransitToFile(album_table_files.date_file); | 223 IPC::PlatformFileForTransitToFile(album_table_files.date_file); |
| 234 files.filename_file = | 224 files.filename_file = |
| 235 IPC::PlatformFileForTransitToFile(album_table_files.filename_file); | 225 IPC::PlatformFileForTransitToFile(album_table_files.filename_file); |
| 236 files.name_file = | 226 files.name_file = |
| 237 IPC::PlatformFileForTransitToFile(album_table_files.name_file); | 227 IPC::PlatformFileForTransitToFile(album_table_files.name_file); |
| 238 files.token_file = | 228 files.token_file = |
| 239 IPC::PlatformFileForTransitToFile(album_table_files.token_file); | 229 IPC::PlatformFileForTransitToFile(album_table_files.token_file); |
| 240 files.uid_file = | 230 files.uid_file = |
| 241 IPC::PlatformFileForTransitToFile(album_table_files.uid_file); | 231 IPC::PlatformFileForTransitToFile(album_table_files.uid_file); |
| 242 | 232 |
| 243 picasa::PicasaAlbumTableReader reader(std::move(files)); | 233 picasa::PicasaAlbumTableReader reader(std::move(files)); |
| 244 bool parse_success = reader.Init(); | 234 bool parse_success = reader.Init(); |
| 245 content::UtilityThread::Get()->Send( | 235 content::UtilityThread::Get()->Send( |
| 246 new ChromeUtilityHostMsg_ParsePicasaPMPDatabase_Finished( | 236 new ChromeUtilityHostMsg_ParsePicasaPMPDatabase_Finished( |
| 247 parse_success, reader.albums(), reader.folders())); | 237 parse_success, reader.albums(), reader.folders())); |
| 248 ReleaseProcessIfNeeded(); | 238 content::UtilityThread::Get()->ReleaseProcessIfNeeded(); |
| 249 } | 239 } |
| 250 | 240 |
| 251 void ExtensionsHandler::OnIndexPicasaAlbumsContents( | 241 void ExtensionsHandler::OnIndexPicasaAlbumsContents( |
| 252 const picasa::AlbumUIDSet& album_uids, | 242 const picasa::AlbumUIDSet& album_uids, |
| 253 const std::vector<picasa::FolderINIContents>& folders_inis) { | 243 const std::vector<picasa::FolderINIContents>& folders_inis) { |
| 254 picasa::PicasaAlbumsIndexer indexer(album_uids); | 244 picasa::PicasaAlbumsIndexer indexer(album_uids); |
| 255 indexer.ParseFolderINI(folders_inis); | 245 indexer.ParseFolderINI(folders_inis); |
| 256 content::UtilityThread::Get()->Send( | 246 content::UtilityThread::Get()->Send( |
| 257 new ChromeUtilityHostMsg_IndexPicasaAlbumsContents_Finished( | 247 new ChromeUtilityHostMsg_IndexPicasaAlbumsContents_Finished( |
| 258 indexer.albums_images())); | 248 indexer.albums_images())); |
| 259 ReleaseProcessIfNeeded(); | 249 content::UtilityThread::Get()->ReleaseProcessIfNeeded(); |
| 260 } | 250 } |
| 261 #endif // defined(OS_WIN) || defined(OS_MACOSX) | 251 #endif // defined(OS_WIN) || defined(OS_MACOSX) |
| 262 | 252 |
| 263 } // namespace extensions | 253 } // namespace extensions |
| OLD | NEW |