From 33eff16e9a5a39797aa40dc164ae29a1826ed373 Mon Sep 17 00:00:00 2001 From: "trop[bot]" <37223003+trop[bot]@users.noreply.github.com> Date: Tue, 1 Apr 2025 09:01:48 -0500 Subject: [PATCH] perf: avoid unnecessary vector copy in `GetMimeTypeToExtensionIdMap()` (#46396) * perf: avoid making an unnecessary copy of the vector MimeTypesHandler::GetMIMETypeAllowlist() returns a const&, so we can iterate that directly instead of making a temporary copy of it. Co-authored-by: Charles Kerr * perf: move the call to ExtensionRegistry::Get() outside of the loop Also, keep the previous behavior of not calling it at all if there aren't any whitelisted extensions. Co-authored-by: Charles Kerr * perf: avoid redundant map lookup Co-authored-by: Charles Kerr * refactor: const correctness Co-authored-by: Charles Kerr * refactor: cleanup Co-authored-by: Charles Kerr --------- Co-authored-by: trop[bot] <37223003+trop[bot]@users.noreply.github.com> Co-authored-by: Charles Kerr --- shell/browser/plugins/plugin_utils.cc | 35 +++++++++++++++------------ 1 file changed, 19 insertions(+), 16 deletions(-) diff --git a/shell/browser/plugins/plugin_utils.cc b/shell/browser/plugins/plugin_utils.cc index 1da80c073ded..9c220eb888b2 100644 --- a/shell/browser/plugins/plugin_utils.cc +++ b/shell/browser/plugins/plugin_utils.cc @@ -33,30 +33,33 @@ std::string PluginUtils::GetExtensionIdForMimeType( base::flat_map PluginUtils::GetMimeTypeToExtensionIdMap( content::BrowserContext* browser_context) { - base::flat_map mime_type_to_extension_id_map; #if BUILDFLAG(ENABLE_ELECTRON_EXTENSIONS) - std::vector allowed_extension_ids = - MimeTypesHandler::GetMIMETypeAllowlist(); + const auto& allowed_extension_ids = MimeTypesHandler::GetMIMETypeAllowlist(); + if (allowed_extension_ids.empty()) + return {}; + + const extensions::ExtensionSet& enabled_extensions = + extensions::ExtensionRegistry::Get(browser_context)->enabled_extensions(); + + base::flat_map mime_type_to_extension_id_map; + // Go through the white-listed extensions and try to use them to intercept // the URL request. - for (const std::string& extension_id : allowed_extension_ids) { - const extensions::Extension* extension = - extensions::ExtensionRegistry::Get(browser_context) - ->enabled_extensions() - .GetByID(extension_id); - // The white-listed extension may not be installed, so we have to nullptr - // check |extension|. - if (!extension) { + for (const std::string& id : allowed_extension_ids) { + const extensions::Extension* extension = enabled_extensions.GetByID(id); + if (!extension) // extension might not be installed, so check for nullptr continue; - } - if (MimeTypesHandler* handler = MimeTypesHandler::GetHandler(extension)) { - for (const auto& supported_mime_type : handler->mime_type_set()) { - DCHECK(!mime_type_to_extension_id_map.contains(supported_mime_type)); - mime_type_to_extension_id_map[supported_mime_type] = extension_id; + if (const MimeTypesHandler* handler = + MimeTypesHandler::GetHandler(extension)) { + for (const std::string& mime_type : handler->mime_type_set()) { + const auto [_, inserted] = + mime_type_to_extension_id_map.insert_or_assign(mime_type, id); + DCHECK(inserted); } } } #endif + return mime_type_to_extension_id_map; }