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

Side by Side Diff: chrome/utility/extensions/extensions_handler.cc

Issue 2667443002: Convert utility process ParseMediaMetadata blob reading IPC to mojo (Closed)
Patch Set: Remove the damn helper: call ReleaseProcessIfNeeded directly. Created 3 years, 10 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 unified diff | Download patch
OLDNEW
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
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
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698