1010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved.
2010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
3010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)// found in the LICENSE file.
4010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
5010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#ifndef CHROME_COMMON_EXTENSIONS_MANIFEST_HANDLERS_AUTOMATION_H_
6010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#define CHROME_COMMON_EXTENSIONS_MANIFEST_HANDLERS_AUTOMATION_H_
7010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
8010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#include <string>
9010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
10010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#include "base/memory/scoped_ptr.h"
11010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#include "extensions/common/extension.h"
12010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#include "extensions/common/manifest_handler.h"
13010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#include "extensions/common/url_pattern_set.h"
14010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#include "extensions/common/user_script.h"
15010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
16010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)namespace extensions {
17010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
185f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)namespace api {
195f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)namespace manifest_types {
205f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)struct Automation;
215f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}
225f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)}
235f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
24010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)class URLPatternSet;
255f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)class AutomationManifestPermission;
26010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
27010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)namespace automation_errors {
28010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)extern const char kErrorInvalidMatchPattern[];
29010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)extern const char kErrorDesktopTrueInteractFalse[];
30010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)extern const char kErrorDesktopTrueMatchesSpecified[];
31010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)extern const char kErrorURLMalformed[];
32010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)extern const char kErrorInvalidMatch[];
33010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)extern const char kErrorNoMatchesProvided[];
34010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)}
35010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
36010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)// The parsed form of the automation manifest entry.
37010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)struct AutomationInfo : public Extension::ManifestData {
38010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) public:
39010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  static const AutomationInfo* Get(const Extension* extension);
40010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  static scoped_ptr<AutomationInfo> FromValue(
41010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)      const base::Value& value,
42010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)      std::vector<InstallWarning>* install_warnings,
43010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)      base::string16* error);
44010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
455f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  static scoped_ptr<base::Value> ToValue(const AutomationInfo& info);
46010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  virtual ~AutomationInfo();
47010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
48010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  // true if the extension has requested 'desktop' permission.
49010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  const bool desktop;
50010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
51010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  // Returns the list of hosts that this extension can request an automation
52010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  // tree from.
53010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  const URLPatternSet matches;
54010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
55010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  // Whether the extension is allowed interactive access (true) or read-only
56010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  // access (false) to the automation tree.
57010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  const bool interact;
58010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
59010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) private:
60010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  AutomationInfo();
615f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  AutomationInfo(bool desktop, URLPatternSet matches, bool interact);
625f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
635f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  static scoped_ptr<api::manifest_types::Automation> AsManifestType(
645f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      const AutomationInfo& info);
655f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
66010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(AutomationInfo);
675f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  friend class AutomationManifestPermission;
685f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  friend class AutomationHandler;
695f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)};
705f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
715f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// Parses the automation manifest entry.
725f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)class AutomationHandler : public ManifestHandler {
735f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) public:
745f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  AutomationHandler();
755f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  virtual ~AutomationHandler();
765f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
775f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) private:
785f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  // ManifestHandler implementation.
795f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  virtual bool Parse(Extension* extensions, base::string16* error) OVERRIDE;
805f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
815f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  virtual ManifestPermission* CreatePermission() OVERRIDE;
825f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  virtual ManifestPermission* CreateInitialRequiredPermission(
835f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      const Extension* extension) OVERRIDE;
845f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  virtual const std::vector<std::string> Keys() const OVERRIDE;
855f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)
865f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(AutomationHandler);
87010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)};
88010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
89010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)}  // namespace extensions
90010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)
91010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#endif  // CHROME_COMMON_EXTENSIONS_MANIFEST_HANDLERS_AUTOMATION_H_
92