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