diff options
Diffstat (limited to 'chromium/chrome/common/extensions/api/url_handlers')
-rw-r--r-- | chromium/chrome/common/extensions/api/url_handlers/url_handlers_parser.cc | 60 | ||||
-rw-r--r-- | chromium/chrome/common/extensions/api/url_handlers/url_handlers_parser.h | 17 |
2 files changed, 48 insertions, 29 deletions
diff --git a/chromium/chrome/common/extensions/api/url_handlers/url_handlers_parser.cc b/chromium/chrome/common/extensions/api/url_handlers/url_handlers_parser.cc index 90bf29d6d76..a9ad5a31b49 100644 --- a/chromium/chrome/common/extensions/api/url_handlers/url_handlers_parser.cc +++ b/chromium/chrome/common/extensions/api/url_handlers/url_handlers_parser.cc @@ -32,6 +32,25 @@ using net::NetworkChangeNotifier; namespace extensions { +namespace { + +const UrlHandlerInfo* GetMatchingUrlHandler(const Extension* extension, + const GURL& url) { + const std::vector<UrlHandlerInfo>* handlers = + UrlHandlers::GetUrlHandlers(extension); + if (!handlers) + return nullptr; + + for (const auto& handler : *handlers) { + if (handler.patterns.MatchesURL(url)) + return &handler; + } + + return nullptr; +} + +} // namespace + namespace mkeys = manifest_keys; namespace merrors = manifest_errors; @@ -56,31 +75,29 @@ const std::vector<UrlHandlerInfo>* UrlHandlers::GetUrlHandlers( } // static -bool UrlHandlers::CanExtensionHandleUrl( - const Extension* extension, - const GURL& url) { - return FindMatchingUrlHandler(extension, url) != NULL; +bool UrlHandlers::CanPlatformAppHandleUrl(const Extension* app, + const GURL& url) { + DCHECK(app->is_platform_app()); + return !!GetMatchingPlatformAppUrlHandler(app, url); +} + +// static +bool UrlHandlers::CanBookmarkAppHandleUrl(const Extension* app, + const GURL& url) { + DCHECK(app->from_bookmark()); + return !!GetMatchingUrlHandler(app, url); } // static -const UrlHandlerInfo* UrlHandlers::FindMatchingUrlHandler( - const Extension* extension, +const UrlHandlerInfo* UrlHandlers::GetMatchingPlatformAppUrlHandler( + const Extension* app, const GURL& url) { - const std::vector<UrlHandlerInfo>* handlers = GetUrlHandlers(extension); - if (!handlers) - return NULL; + DCHECK(app->is_platform_app()); if (NetworkChangeNotifier::IsOffline() && - !OfflineEnabledInfo::IsOfflineEnabled(extension)) - return NULL; - - for (std::vector<extensions::UrlHandlerInfo>::const_iterator it = - handlers->begin(); it != handlers->end(); it++) { - if (it->patterns.MatchesURL(url)) - return &(*it); - } - - return NULL; + !OfflineEnabledInfo::IsOfflineEnabled(app)) + return nullptr; + return GetMatchingUrlHandler(app, url); } UrlHandlersParser::UrlHandlersParser() { @@ -169,8 +186,9 @@ bool UrlHandlersParser::Parse(Extension* extension, base::string16* error) { return true; } -const std::vector<std::string> UrlHandlersParser::Keys() const { - return SingleKey(mkeys::kUrlHandlers); +base::span<const char* const> UrlHandlersParser::Keys() const { + static constexpr const char* kKeys[] = {mkeys::kUrlHandlers}; + return kKeys; } } // namespace extensions diff --git a/chromium/chrome/common/extensions/api/url_handlers/url_handlers_parser.h b/chromium/chrome/common/extensions/api/url_handlers/url_handlers_parser.h index a580c6f12a4..304fe03327a 100644 --- a/chromium/chrome/common/extensions/api/url_handlers/url_handlers_parser.h +++ b/chromium/chrome/common/extensions/api/url_handlers/url_handlers_parser.h @@ -37,16 +37,17 @@ struct UrlHandlers : public Extension::ManifestData { static const std::vector<UrlHandlerInfo>* GetUrlHandlers( const Extension* extension); - // Determines whether |extension| has at least one URL handler that matches + // Determines whether |app| has at least one URL handler that matches // |url|. - static bool CanExtensionHandleUrl( - const Extension* extension, - const GURL& url); + static bool CanPlatformAppHandleUrl(const Extension* app, const GURL& url); + + // Determines whether |app| has at least one URL handler that matches |url|. + static bool CanBookmarkAppHandleUrl(const Extension* app, const GURL& url); - // Finds a matching URL handler for |extension|, if any. Returns NULL in none + // Finds a matching URL handler for |app|, if any. Returns nullptr if none // are found. - static const UrlHandlerInfo* FindMatchingUrlHandler( - const Extension* extension, + static const UrlHandlerInfo* GetMatchingPlatformAppUrlHandler( + const Extension* app, const GURL& url); std::vector<UrlHandlerInfo> handlers; @@ -62,7 +63,7 @@ class UrlHandlersParser : public ManifestHandler { bool Parse(Extension* extension, base::string16* error) override; private: - const std::vector<std::string> Keys() const override; + base::span<const char* const> Keys() const override; DISALLOW_COPY_AND_ASSIGN(UrlHandlersParser); }; |