1116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// Copyright 2014 The Chromium Authors. All rights reserved.
2116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// Use of this source code is governed by a BSD-style license that can be
3116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// found in the LICENSE file.
4116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
5116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#ifndef EXTENSIONS_RENDERER_PROGRAMMATIC_SCRIPT_INJECTOR_H_
6116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#define EXTENSIONS_RENDERER_PROGRAMMATIC_SCRIPT_INJECTOR_H_
7116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
8116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "base/macros.h"
9116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "base/memory/scoped_ptr.h"
10116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "extensions/renderer/script_injection.h"
11116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "url/gurl.h"
12116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
13116680a4aac90f2aa7413d9095a592090648e557Ben Murdochstruct ExtensionMsg_ExecuteCode_Params;
14116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
15116680a4aac90f2aa7413d9095a592090648e557Ben Murdochnamespace blink {
16116680a4aac90f2aa7413d9095a592090648e557Ben Murdochclass WebFrame;
17116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch}
18116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
19116680a4aac90f2aa7413d9095a592090648e557Ben Murdochnamespace content {
20116680a4aac90f2aa7413d9095a592090648e557Ben Murdochclass RenderView;
21116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch}
22116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
23116680a4aac90f2aa7413d9095a592090648e557Ben Murdochnamespace extensions {
24116680a4aac90f2aa7413d9095a592090648e557Ben Murdochclass Extension;
25116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
26116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// A ScriptInjector to handle tabs.executeScript().
27116680a4aac90f2aa7413d9095a592090648e557Ben Murdochclass ProgrammaticScriptInjector : public ScriptInjector {
28116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch public:
29116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  ProgrammaticScriptInjector(const ExtensionMsg_ExecuteCode_Params& params,
30116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch                             blink::WebFrame* web_frame);
31116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  virtual ~ProgrammaticScriptInjector();
32116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
33116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch private:
34116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  // ScriptInjector implementation.
35116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  virtual UserScript::InjectionType script_type() const OVERRIDE;
36116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  virtual bool ShouldExecuteInChildFrames() const OVERRIDE;
37116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  virtual bool ShouldExecuteInMainWorld() const OVERRIDE;
38116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  virtual bool IsUserGesture() const OVERRIDE;
39116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  virtual bool ExpectsResults() const OVERRIDE;
40116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  virtual bool ShouldInjectJs(
41116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      UserScript::RunLocation run_location) const OVERRIDE;
42116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  virtual bool ShouldInjectCss(
43116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      UserScript::RunLocation run_location) const OVERRIDE;
44116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  virtual PermissionsData::AccessType CanExecuteOnFrame(
45116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      const Extension* extension,
46116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      blink::WebFrame* web_frame,
47116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      int tab_id,
48116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      const GURL& top_url) const OVERRIDE;
49116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  virtual std::vector<blink::WebScriptSource> GetJsSources(
50116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      UserScript::RunLocation run_location) const OVERRIDE;
51116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  virtual std::vector<std::string> GetCssSources(
52116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      UserScript::RunLocation run_location) const OVERRIDE;
53116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  virtual void OnInjectionComplete(
54116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      scoped_ptr<base::ListValue> execution_results,
55116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      ScriptsRunInfo* scripts_run_info,
56116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      UserScript::RunLocation run_location) OVERRIDE;
57116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  virtual void OnWillNotInject(InjectFailureReason reason) OVERRIDE;
58116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
59116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  // Return the run location for this injector.
60116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  UserScript::RunLocation GetRunLocation() const;
61116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
62116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  // Notify the browser that the script was injected (or never will be), and
63116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  // send along any results or errors.
64116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  void Finish(const std::string& error);
65116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
66116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  // The parameters for injecting the script.
67116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  scoped_ptr<ExtensionMsg_ExecuteCode_Params> params_;
68116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
69116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  // The url of the frame into which we are injecting.
70116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  GURL url_;
71116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
72116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  // The RenderView to which we send the response upon completion.
73116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  content::RenderView* render_view_;
74116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
75116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  // The results of the script execution.
76116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  scoped_ptr<base::ListValue> results_;
77116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
78116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  // Whether or not this script injection has finished.
79116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  bool finished_;
80116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
81116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  DISALLOW_COPY_AND_ASSIGN(ProgrammaticScriptInjector);
82116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch};
83116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
84116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch}  // namespace extensions
85116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
86116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif  // EXTENSIONS_RENDERER_PROGRAMMATIC_SCRIPT_INJECTOR_H_
87