Home | History | Annotate | Download | only in renderer
      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 
     15 namespace blink {
     16 class WebFrame;
     17 }
     18 
     19 namespace extensions {
     20 class Dispatcher;
     21 class Extension;
     22 class ModuleSystem;
     23 class ResourceBundleSourceMap;
     24 class ScriptContext;
     25 class 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.
     30 class 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,
     40       const Extension* effective_extension,
     41       Feature::Context effective_context_type) = 0;
     42 
     43   // Initializes origin permissions for a newly created extension context.
     44   virtual void InitOriginPermissions(const Extension* extension,
     45                                      bool is_extension_active) {}
     46 
     47   // Includes additional native handlers in a ScriptContext's ModuleSystem.
     48   virtual void RegisterNativeHandlers(Dispatcher* dispatcher,
     49                                       ModuleSystem* module_system,
     50                                       ScriptContext* context) {}
     51 
     52   // Includes additional source resources into the resource map.
     53   virtual void PopulateSourceMap(ResourceBundleSourceMap* source_map) {}
     54 
     55   // Requires additional modules within an extension context's module system.
     56   virtual void RequireAdditionalModules(ScriptContext* context,
     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       const GURL& url,
     83       int tab_id,
     84       const std::string& extension_id,
     85       const extensions::URLPatternSet& origin_set) {}
     86 };
     87 
     88 }  // namespace extensions
     89 
     90 #endif  // EXTENSIONS_RENDERER_DISPATCHER_DELEGATE_H_
     91