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) 51320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#ifndef EXTENSIONS_RENDERER_DISPATCHER_DELEGATE_H_ 61320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#define EXTENSIONS_RENDERER_DISPATCHER_DELEGATE_H_ 7010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 8010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#include <set> 9010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#include <string> 10010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 11010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#include "base/memory/scoped_ptr.h" 12010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#include "extensions/common/features/feature.h" 13010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#include "v8/include/v8.h" 14010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 15010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)namespace blink { 16010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)class WebFrame; 17010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)} 18010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 19010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)namespace extensions { 20010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)class Dispatcher; 21010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)class Extension; 22010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)class ModuleSystem; 23010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)class ResourceBundleSourceMap; 24010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)class ScriptContext; 25010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)class URLPatternSet; 26010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 27010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)// Base class and default implementation for an extensions::Dispacher delegate. 28010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)// DispatcherDelegate can be used to override and extend the behavior of the 29010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)// extensions system's renderer side. 30010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)class DispatcherDelegate { 31010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) public: 32010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) virtual ~DispatcherDelegate() {} 33010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 34010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) // Creates a new ScriptContext for a given v8 context. 35010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) virtual scoped_ptr<ScriptContext> CreateScriptContext( 36010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) const v8::Handle<v8::Context>& v8_context, 37010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) blink::WebFrame* frame, 38010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) const Extension* extension, 391320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci Feature::Context context_type, 401320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const Extension* effective_extension, 411320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci Feature::Context effective_context_type) = 0; 42010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 43010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) // Initializes origin permissions for a newly created extension context. 44010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) virtual void InitOriginPermissions(const Extension* extension, 45f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) bool is_extension_active) {} 46010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 475f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // Includes additional native handlers in a ScriptContext's ModuleSystem. 48010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) virtual void RegisterNativeHandlers(Dispatcher* dispatcher, 49010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) ModuleSystem* module_system, 50010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) ScriptContext* context) {} 51010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 52010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) // Includes additional source resources into the resource map. 53010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) virtual void PopulateSourceMap(ResourceBundleSourceMap* source_map) {} 54010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 55010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) // Requires additional modules within an extension context's module system. 565f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) virtual void RequireAdditionalModules(ScriptContext* context, 57010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) bool is_within_platform_app) {} 58010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 59010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) // Allows the delegate to respond to an updated set of active extensions in 60010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) // the Dispatcher. 61010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) virtual void OnActiveExtensionsUpdated( 62010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) const std::set<std::string>& extension_ids) {} 63010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 64010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) // Sets the current Chrome channel. 65010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) // TODO(rockot): This doesn't belong in a generic extensions system interface. 66010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) // See http://crbug.com/368431. 67010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) virtual void SetChannel(int channel) {} 68010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 69010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) // Clears extension permissions specific to a given tab. 70010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) // TODO(rockot): This doesn't belong in a generic extensions system interface. 71010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) // See http://crbug.com/368431. 72010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) virtual void ClearTabSpecificPermissions( 73010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) const extensions::Dispatcher* dispatcher, 74010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) int tab_id, 75010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) const std::vector<std::string>& extension_ids) {} 76010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 77010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) // Updates extension permissions specific to a given tab. 78010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) // TODO(rockot): This doesn't belong in a generic extensions system interface. 79010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) // See http://crbug.com/368431. 80010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) virtual void UpdateTabSpecificPermissions( 81010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) const extensions::Dispatcher* dispatcher, 82116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const GURL& url, 83010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) int tab_id, 84010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) const std::string& extension_id, 85010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) const extensions::URLPatternSet& origin_set) {} 86010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)}; 87010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 88010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)} // namespace extensions 89010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 901320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#endif // EXTENSIONS_RENDERER_DISPATCHER_DELEGATE_H_ 91