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