blob: c4ecb008d06efec79f9c802e14dc4afafbd85991 [file] [log] [blame]
[email protected]16a4206f2014-08-15 09:44:431// Copyright 2014 The Chromium Authors. All rights reserved.
[email protected]3fd3cf72012-05-14 05:51:562// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
limasdfd70dc5ae2014-09-13 00:02:225#ifndef EXTENSIONS_BROWSER_SCRIPT_EXECUTOR_H_
6#define EXTENSIONS_BROWSER_SCRIPT_EXECUTOR_H_
[email protected]3fd3cf72012-05-14 05:51:567
[email protected]3fd3cf72012-05-14 05:51:568#include "base/callback_forward.h"
[email protected]af78a802012-07-10 23:47:029#include "base/observer_list.h"
[email protected]49d9b142013-07-19 08:50:2710#include "extensions/common/user_script.h"
[email protected]3fd3cf72012-05-14 05:51:5611
[email protected]7f3b91e2012-08-07 08:05:0312class GURL;
[email protected]ac02ac52014-05-20 01:11:2613struct ExtensionMsg_ExecuteCode_Params;
[email protected]7f3b91e2012-08-07 08:05:0314
[email protected]cab8cd982012-07-20 20:57:0315namespace base {
16class ListValue;
17} // namespace base
18
[email protected]3fd3cf72012-05-14 05:51:5619namespace content {
20class WebContents;
21}
22
23namespace extensions {
[email protected]16a4206f2014-08-15 09:44:4324class ScriptExecutionObserver;
[email protected]3fd3cf72012-05-14 05:51:5625
26// Interface for executing extension content scripts (e.g. executeScript) as
27// described by the ExtensionMsg_ExecuteCode_Params IPC, and notifying the
28// caller when responded with ExtensionHostMsg_ExecuteCodeFinished.
29class ScriptExecutor {
30 public:
[email protected]09ae70d42012-11-07 00:42:0931 ScriptExecutor(
32 content::WebContents* web_contents,
33 // |script_observers| is assumed to be owned by |this|'s owner, and in
34 // such a way that |this| is destroyed first.
[email protected]16a4206f2014-08-15 09:44:4335 ObserverList<ScriptExecutionObserver>* script_observers);
[email protected]af78a802012-07-10 23:47:0236
37 ~ScriptExecutor();
[email protected]3fd3cf72012-05-14 05:51:5638
39 // The type of script being injected.
40 enum ScriptType {
41 JAVASCRIPT,
42 CSS,
43 };
44
45 // The scope of the script injection across the frames.
46 enum FrameScope {
47 TOP_FRAME,
48 ALL_FRAMES,
49 };
50
[email protected]ae26b282014-05-15 16:40:1651 // Whether to insert the script in about: frames when its origin matches
52 // the extension's host permissions.
53 enum MatchAboutBlank {
54 DONT_MATCH_ABOUT_BLANK,
55 MATCH_ABOUT_BLANK,
56 };
57
[email protected]3fd3cf72012-05-14 05:51:5658 // The type of world to inject into (main world, or its own isolated world).
59 enum WorldType {
60 MAIN_WORLD,
61 ISOLATED_WORLD,
62 };
63
[email protected]88c6f5c2013-08-28 04:08:4164 // The type of process the target is.
65 enum ProcessType {
66 DEFAULT_PROCESS,
67 WEB_VIEW_PROCESS,
68 };
69
70 // The type of result the caller is interested in.
71 enum ResultType {
72 NO_RESULT,
73 JSON_SERIALIZED_RESULT,
74 };
75
[email protected]0f8bf4f2014-07-02 19:26:5376 // Callback from ExecuteScript. The arguments are (error, on_url, result).
77 // Success is implied by an empty error.
[email protected]16a4206f2014-08-15 09:44:4378 typedef base::Callback<
79 void(const std::string&, const GURL&, const base::ListValue&)>
[email protected]28a69d32012-05-30 07:58:1880 ExecuteScriptCallback;
[email protected]3fd3cf72012-05-14 05:51:5681
[email protected]3fd3cf72012-05-14 05:51:5682 // Executes a script. The arguments match ExtensionMsg_ExecuteCode_Params in
83 // extension_messages.h (request_id is populated automatically).
84 //
85 // |callback| will always be called even if the IPC'd renderer is destroyed
86 // before a response is received (in this case the callback will be with a
87 // failure and appropriate error message).
[email protected]af78a802012-07-10 23:47:0288 void ExecuteScript(const std::string& extension_id,
89 ScriptType script_type,
90 const std::string& code,
91 FrameScope frame_scope,
[email protected]ae26b282014-05-15 16:40:1692 MatchAboutBlank match_about_blank,
[email protected]af78a802012-07-10 23:47:0293 UserScript::RunLocation run_at,
94 WorldType world_type,
[email protected]88c6f5c2013-08-28 04:08:4195 ProcessType process_type,
[email protected]6f451a42014-04-10 17:12:4796 const GURL& webview_src,
[email protected]a7074d12013-10-03 23:09:3097 const GURL& file_url,
[email protected]0df49432014-03-04 01:02:5098 bool user_gesture,
[email protected]88c6f5c2013-08-28 04:08:4199 ResultType result_type,
[email protected]af78a802012-07-10 23:47:02100 const ExecuteScriptCallback& callback);
101
[email protected]af78a802012-07-10 23:47:02102 private:
103 // The next value to use for request_id in ExtensionMsg_ExecuteCode_Params.
104 int next_request_id_;
105
[email protected]af78a802012-07-10 23:47:02106 content::WebContents* web_contents_;
107
[email protected]16a4206f2014-08-15 09:44:43108 ObserverList<ScriptExecutionObserver>* script_observers_;
[email protected]3fd3cf72012-05-14 05:51:56109};
110
111} // namespace extensions
112
limasdfd70dc5ae2014-09-13 00:02:22113#endif // EXTENSIONS_BROWSER_SCRIPT_EXECUTOR_H_