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

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

Issue 2611283002: [mojo talk demo] Convert utility process CheckMediaFile IPC to mojo (Closed)
Patch Set: 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 unified diff | Download patch
« no previous file with comments | « chrome/utility/extensions/extensions_handler.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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"
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
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
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
OLDNEW
« no previous file with comments | « chrome/utility/extensions/extensions_handler.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698