1// Copyright 2014 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_MANIFEST_HANDLERS_AUTOMATION_H_ 6#define CHROME_COMMON_EXTENSIONS_MANIFEST_HANDLERS_AUTOMATION_H_ 7 8#include <string> 9 10#include "base/memory/scoped_ptr.h" 11#include "extensions/common/extension.h" 12#include "extensions/common/manifest_handler.h" 13#include "extensions/common/url_pattern_set.h" 14#include "extensions/common/user_script.h" 15 16namespace extensions { 17 18namespace api { 19namespace manifest_types { 20struct Automation; 21} 22} 23 24class URLPatternSet; 25class AutomationManifestPermission; 26 27namespace automation_errors { 28extern const char kErrorInvalidMatchPattern[]; 29extern const char kErrorDesktopTrueInteractFalse[]; 30extern const char kErrorDesktopTrueMatchesSpecified[]; 31extern const char kErrorURLMalformed[]; 32extern const char kErrorInvalidMatch[]; 33extern const char kErrorNoMatchesProvided[]; 34} 35 36// The parsed form of the automation manifest entry. 37struct AutomationInfo : public Extension::ManifestData { 38 public: 39 static const AutomationInfo* Get(const Extension* extension); 40 static scoped_ptr<AutomationInfo> FromValue( 41 const base::Value& value, 42 std::vector<InstallWarning>* install_warnings, 43 base::string16* error); 44 45 static scoped_ptr<base::Value> ToValue(const AutomationInfo& info); 46 virtual ~AutomationInfo(); 47 48 // true if the extension has requested 'desktop' permission. 49 const bool desktop; 50 51 // Returns the list of hosts that this extension can request an automation 52 // tree from. 53 const URLPatternSet matches; 54 55 // Whether the extension is allowed interactive access (true) or read-only 56 // access (false) to the automation tree. 57 const bool interact; 58 59 private: 60 AutomationInfo(); 61 AutomationInfo(bool desktop, URLPatternSet matches, bool interact); 62 63 static scoped_ptr<api::manifest_types::Automation> AsManifestType( 64 const AutomationInfo& info); 65 66 DISALLOW_COPY_AND_ASSIGN(AutomationInfo); 67 friend class AutomationManifestPermission; 68 friend class AutomationHandler; 69}; 70 71// Parses the automation manifest entry. 72class AutomationHandler : public ManifestHandler { 73 public: 74 AutomationHandler(); 75 virtual ~AutomationHandler(); 76 77 private: 78 // ManifestHandler implementation. 79 virtual bool Parse(Extension* extensions, base::string16* error) OVERRIDE; 80 81 virtual ManifestPermission* CreatePermission() OVERRIDE; 82 virtual ManifestPermission* CreateInitialRequiredPermission( 83 const Extension* extension) OVERRIDE; 84 virtual const std::vector<std::string> Keys() const OVERRIDE; 85 86 DISALLOW_COPY_AND_ASSIGN(AutomationHandler); 87}; 88 89} // namespace extensions 90 91#endif // CHROME_COMMON_EXTENSIONS_MANIFEST_HANDLERS_AUTOMATION_H_ 92