blob: ef5420a5e006294fad620adbb8775da25c55fa87 [file] [log] [blame]
[email protected]c11e6592014-06-27 17:07:341// 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_PROGRAMMATIC_SCRIPT_INJECTOR_H_
6#define EXTENSIONS_RENDERER_PROGRAMMATIC_SCRIPT_INJECTOR_H_
7
8#include "base/macros.h"
9#include "base/memory/scoped_ptr.h"
10#include "extensions/renderer/script_injection.h"
[email protected]cde18a2d2014-07-01 03:13:0411#include "url/gurl.h"
[email protected]c11e6592014-06-27 17:07:3412
13struct ExtensionMsg_ExecuteCode_Params;
14
15namespace blink {
16class WebFrame;
17}
18
[email protected]cde18a2d2014-07-01 03:13:0419namespace content {
20class RenderView;
21}
22
[email protected]c11e6592014-06-27 17:07:3423namespace extensions {
24class Extension;
25
26// A ScriptInjector to handle tabs.executeScript().
27class ProgrammaticScriptInjector : public ScriptInjector {
28 public:
29 ProgrammaticScriptInjector(const ExtensionMsg_ExecuteCode_Params& params,
30 blink::WebFrame* web_frame);
dcheng9168b2f2014-10-21 12:38:2431 ~ProgrammaticScriptInjector() override;
[email protected]c11e6592014-06-27 17:07:3432
33 private:
34 // ScriptInjector implementation.
dcheng9168b2f2014-10-21 12:38:2435 UserScript::InjectionType script_type() const override;
36 bool ShouldExecuteInChildFrames() const override;
37 bool ShouldExecuteInMainWorld() const override;
38 bool IsUserGesture() const override;
39 bool ExpectsResults() const override;
40 bool ShouldInjectJs(UserScript::RunLocation run_location) const override;
41 bool ShouldInjectCss(UserScript::RunLocation run_location) const override;
42 PermissionsData::AccessType CanExecuteOnFrame(
[email protected]23a85362014-07-07 23:26:1943 const Extension* extension,
44 blink::WebFrame* web_frame,
45 int tab_id,
mostynb0eac4e1b2014-10-03 16:32:1946 const GURL& top_url) const override;
dcheng9168b2f2014-10-21 12:38:2447 std::vector<blink::WebScriptSource> GetJsSources(
mostynb0eac4e1b2014-10-03 16:32:1948 UserScript::RunLocation run_location) const override;
dcheng9168b2f2014-10-21 12:38:2449 std::vector<std::string> GetCssSources(
mostynb0eac4e1b2014-10-03 16:32:1950 UserScript::RunLocation run_location) const override;
dcheng9168b2f2014-10-21 12:38:2451 void OnInjectionComplete(scoped_ptr<base::ListValue> execution_results,
52 ScriptsRunInfo* scripts_run_info,
53 UserScript::RunLocation run_location) override;
54 void OnWillNotInject(InjectFailureReason reason) override;
[email protected]c11e6592014-06-27 17:07:3455
56 // Return the run location for this injector.
57 UserScript::RunLocation GetRunLocation() const;
58
59 // Notify the browser that the script was injected (or never will be), and
60 // send along any results or errors.
61 void Finish(const std::string& error);
62
63 // The parameters for injecting the script.
64 scoped_ptr<ExtensionMsg_ExecuteCode_Params> params_;
65
[email protected]cde18a2d2014-07-01 03:13:0466 // The url of the frame into which we are injecting.
67 GURL url_;
68
69 // The RenderView to which we send the response upon completion.
70 content::RenderView* render_view_;
[email protected]c11e6592014-06-27 17:07:3471
72 // The results of the script execution.
73 scoped_ptr<base::ListValue> results_;
74
75 // Whether or not this script injection has finished.
76 bool finished_;
77
78 DISALLOW_COPY_AND_ASSIGN(ProgrammaticScriptInjector);
79};
80
81} // namespace extensions
82
83#endif // EXTENSIONS_RENDERER_PROGRAMMATIC_SCRIPT_INJECTOR_H_