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.
5 #ifndef EXTENSIONS_RENDERER_USER_SCRIPT_INJECTOR_H_
6 #define EXTENSIONS_RENDERER_USER_SCRIPT_INJECTOR_H_
10 #include "base/memory/scoped_ptr.h"
11 #include "base/scoped_observer.h"
12 #include "extensions/common/user_script.h"
13 #include "extensions/renderer/script_injection.h"
14 #include "extensions/renderer/user_script_set.h"
20 namespace extensions {
23 // A ScriptInjector for UserScripts.
24 class UserScriptInjector : public ScriptInjector,
25 public UserScriptSet::Observer {
27 UserScriptInjector(const UserScript* user_script,
28 UserScriptSet* user_script_set,
30 virtual ~UserScriptInjector();
33 // UserScriptSet::Observer implementation.
34 virtual void OnUserScriptsUpdated(
35 const std::set<std::string>& changed_extensions,
36 const std::vector<UserScript*>& scripts) OVERRIDE;
38 // ScriptInjector implementation.
39 virtual UserScript::InjectionType script_type() const OVERRIDE;
40 virtual bool ShouldExecuteInChildFrames() const OVERRIDE;
41 virtual bool ShouldExecuteInMainWorld() const OVERRIDE;
42 virtual bool IsUserGesture() const OVERRIDE;
43 virtual bool ExpectsResults() const OVERRIDE;
44 virtual bool ShouldInjectJs(
45 UserScript::RunLocation run_location) const OVERRIDE;
46 virtual bool ShouldInjectCss(
47 UserScript::RunLocation run_location) const OVERRIDE;
48 virtual PermissionsData::AccessType CanExecuteOnFrame(
49 const Extension* extension,
50 blink::WebFrame* web_frame,
52 const GURL& top_url) const OVERRIDE;
53 virtual std::vector<blink::WebScriptSource> GetJsSources(
54 UserScript::RunLocation run_location) const OVERRIDE;
55 virtual std::vector<std::string> GetCssSources(
56 UserScript::RunLocation run_location) const OVERRIDE;
57 virtual void OnInjectionComplete(
58 scoped_ptr<base::ListValue> execution_results,
59 ScriptsRunInfo* scripts_run_info,
60 UserScript::RunLocation run_location) OVERRIDE;
61 virtual void OnWillNotInject(InjectFailureReason reason) OVERRIDE;
63 // The associated user script. Owned by the UserScriptInjector that created
65 const UserScript* script_;
67 // The id of the associated user script. We cache this because when we update
68 // the |script_| associated with this injection, the old referance may be
72 // The associated extension id, preserved for the same reason as |script_id|.
73 std::string extension_id_;
75 // Indicates whether or not this script is declarative. This influences which
76 // script permissions are checked before injection.
79 ScopedObserver<UserScriptSet, UserScriptSet::Observer>
80 user_script_set_observer_;
82 DISALLOW_COPY_AND_ASSIGN(UserScriptInjector);
85 } // namespace extensions
87 #endif // EXTENSIONS_RENDERER_USER_SCRIPT_INJECTOR_H_