Update To 11.40.268.0
[platform/framework/web/crosswalk.git] / src / chrome / common / extensions / api / url_handlers / url_handlers_parser.h
1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #ifndef CHROME_COMMON_EXTENSIONS_API_URL_HANDLERS_URL_HANDLERS_PARSER_H_
6 #define CHROME_COMMON_EXTENSIONS_API_URL_HANDLERS_URL_HANDLERS_PARSER_H_
7
8 #include <string>
9 #include <vector>
10
11 #include "extensions/common/extension.h"
12 #include "extensions/common/manifest_handler.h"
13 #include "extensions/common/url_pattern.h"
14
15 class GURL;
16
17 namespace extensions {
18
19 struct UrlHandlerInfo {
20   UrlHandlerInfo();
21   ~UrlHandlerInfo();
22
23   // ID identifying this handler in the manifest.
24   std::string id;
25   // Handler title to display in all relevant UI.
26   std::string title;
27   // URL patterns associated with this handler.
28   URLPatternSet patterns;
29 };
30
31 struct UrlHandlers : public Extension::ManifestData {
32   UrlHandlers();
33   ~UrlHandlers() override;
34
35   // Returns an array of URL handlers |extension| has defined in its manifest.
36   static const std::vector<UrlHandlerInfo>* GetUrlHandlers(
37       const Extension* extension);
38
39   // Determines whether |extension| has at least one URL handler that matches
40   // |url|.
41   static bool CanExtensionHandleUrl(
42       const Extension* extension,
43       const GURL& url);
44
45   // Finds a matching URL handler for |extension|, if any. Returns NULL in none
46   // are found.
47   static const UrlHandlerInfo* FindMatchingUrlHandler(
48       const Extension* extension,
49       const GURL& url);
50
51   std::vector<UrlHandlerInfo> handlers;
52 };
53
54 // Parses the "url_handlers" manifest key.
55 class UrlHandlersParser : public ManifestHandler {
56  public:
57   UrlHandlersParser();
58   ~UrlHandlersParser() override;
59
60   // ManifestHandler API
61   bool Parse(Extension* extension, base::string16* error) override;
62
63  private:
64   const std::vector<std::string> Keys() const override;
65
66   DISALLOW_COPY_AND_ASSIGN(UrlHandlersParser);
67 };
68
69 }  // namespace extensions
70
71 #endif  // CHROME_COMMON_EXTENSIONS_API_URL_HANDLERS_URL_HANDLERS_PARSER_H_