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 EXTENSIONS_RENDERER_DISPATCHER_DELEGATE_H 6#define EXTENSIONS_RENDERER_DISPATCHER_DELEGATE_H 7 8#include <set> 9#include <string> 10 11#include "base/memory/scoped_ptr.h" 12#include "extensions/common/features/feature.h" 13#include "v8/include/v8.h" 14 15namespace blink { 16class WebFrame; 17} 18 19namespace extensions { 20class Dispatcher; 21class Extension; 22class ModuleSystem; 23class ResourceBundleSourceMap; 24class ScriptContext; 25class URLPatternSet; 26 27// Base class and default implementation for an extensions::Dispacher delegate. 28// DispatcherDelegate can be used to override and extend the behavior of the 29// extensions system's renderer side. 30class DispatcherDelegate { 31 public: 32 virtual ~DispatcherDelegate() {} 33 34 // Creates a new ScriptContext for a given v8 context. 35 virtual scoped_ptr<ScriptContext> CreateScriptContext( 36 const v8::Handle<v8::Context>& v8_context, 37 blink::WebFrame* frame, 38 const Extension* extension, 39 Feature::Context context_type) = 0; 40 41 // Initializes origin permissions for a newly created extension context. 42 virtual void InitOriginPermissions(const Extension* extension, 43 bool is_extension_active) {} 44 45 // Includes additional native handlers in a given ModuleSystem. 46 virtual void RegisterNativeHandlers(Dispatcher* dispatcher, 47 ModuleSystem* module_system, 48 ScriptContext* context) {} 49 50 // Includes additional source resources into the resource map. 51 virtual void PopulateSourceMap(ResourceBundleSourceMap* source_map) {} 52 53 // Requires additional modules within an extension context's module system. 54 virtual void RequireAdditionalModules(ModuleSystem* module_system, 55 const Extension* extension, 56 Feature::Context context_type, 57 bool is_within_platform_app) {} 58 59 // Allows the delegate to respond to an updated set of active extensions in 60 // the Dispatcher. 61 virtual void OnActiveExtensionsUpdated( 62 const std::set<std::string>& extension_ids) {} 63 64 // Sets the current Chrome channel. 65 // TODO(rockot): This doesn't belong in a generic extensions system interface. 66 // See http://crbug.com/368431. 67 virtual void SetChannel(int channel) {} 68 69 // Clears extension permissions specific to a given tab. 70 // TODO(rockot): This doesn't belong in a generic extensions system interface. 71 // See http://crbug.com/368431. 72 virtual void ClearTabSpecificPermissions( 73 const extensions::Dispatcher* dispatcher, 74 int tab_id, 75 const std::vector<std::string>& extension_ids) {} 76 77 // Updates extension permissions specific to a given tab. 78 // TODO(rockot): This doesn't belong in a generic extensions system interface. 79 // See http://crbug.com/368431. 80 virtual void UpdateTabSpecificPermissions( 81 const extensions::Dispatcher* dispatcher, 82 int page_id, 83 int tab_id, 84 const std::string& extension_id, 85 const extensions::URLPatternSet& origin_set) {} 86 87 // Allows the delegate to respond to reports from the browser about WebRequest 88 // API usage from within this process. 89 virtual void HandleWebRequestAPIUsage(bool webrequest_used) {} 90}; 91 92} // namespace extensions 93 94#endif // EXTENSIONS_RENDERER_DISPATCHER_DELEGATE_H 95