summaryrefslogtreecommitdiff
path: root/chromium/chrome/common/extensions/api/url_handlers
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/chrome/common/extensions/api/url_handlers')
-rw-r--r--chromium/chrome/common/extensions/api/url_handlers/url_handlers_parser.cc60
-rw-r--r--chromium/chrome/common/extensions/api/url_handlers/url_handlers_parser.h17
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);
};