158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved. 258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)// found in the LICENSE file. 458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#ifndef CHROME_COMMON_EXTENSIONS_API_URL_HANDLERS_URL_HANDLERS_PARSER_H_ 658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#define CHROME_COMMON_EXTENSIONS_API_URL_HANDLERS_URL_HANDLERS_PARSER_H_ 758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include <string> 958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include <vector> 1058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 11f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "extensions/common/extension.h" 12f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "extensions/common/manifest_handler.h" 1358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "extensions/common/url_pattern.h" 1458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 1558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)class GURL; 1658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 1758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)namespace extensions { 1858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 1958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)struct UrlHandlerInfo { 2058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) UrlHandlerInfo(); 2158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) ~UrlHandlerInfo(); 2258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 2358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) // ID identifying this handler in the manifest. 2458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) std::string id; 2558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) // Handler title to display in all relevant UI. 2658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) std::string title; 2758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) // URL patterns associated with this handler. 2858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) URLPatternSet patterns; 2958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)}; 3058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 3158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)struct UrlHandlers : public Extension::ManifestData { 3258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) UrlHandlers(); 3358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) virtual ~UrlHandlers(); 3458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 3558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) // Returns an array of URL handlers |extension| has defined in its manifest. 3658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) static const std::vector<UrlHandlerInfo>* GetUrlHandlers( 3758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) const Extension* extension); 3858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 3958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) // Determines whether |extension| has at least one URL handler that matches 4058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) // |url|. 4158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) static bool CanExtensionHandleUrl( 4258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) const Extension* extension, 4358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) const GURL& url); 4458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 4558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) // Finds a matching URL handler for |extension|, if any. Returns NULL in none 4658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) // are found. 4758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) static const UrlHandlerInfo* FindMatchingUrlHandler( 4858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) const Extension* extension, 4958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) const GURL& url); 5058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 5158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) std::vector<UrlHandlerInfo> handlers; 5258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)}; 5358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 5458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)// Parses the "url_handlers" manifest key. 5558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)class UrlHandlersParser : public ManifestHandler { 5658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) public: 5758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) UrlHandlersParser(); 5858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) virtual ~UrlHandlersParser(); 5958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 6058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) // ManifestHandler API 61a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) virtual bool Parse(Extension* extension, base::string16* error) OVERRIDE; 6258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 6358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) private: 6458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) virtual const std::vector<std::string> Keys() const OVERRIDE; 6558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 6658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(UrlHandlersParser); 6758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)}; 6858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 6958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)} // namespace extensions 7058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 7158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#endif // CHROME_COMMON_EXTENSIONS_API_URL_HANDLERS_URL_HANDLERS_PARSER_H_ 72