NaCl: Update revision in DEPS, r12770 -> r12773
[chromium-blink-merge.git] / chrome / browser / extensions / script_executor.h
blob8dcc1ac757e167ccffeb907185892144aa497f31
1 // Copyright (c) 2012 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 CHROME_BROWSER_EXTENSIONS_SCRIPT_EXECUTOR_H_
6 #define CHROME_BROWSER_EXTENSIONS_SCRIPT_EXECUTOR_H_
8 #include <string>
10 #include "base/callback_forward.h"
11 #include "base/observer_list.h"
12 #include "chrome/browser/extensions/tab_helper.h"
13 #include "extensions/common/user_script.h"
15 class GURL;
17 namespace base {
18 class ListValue;
19 } // namespace base
21 namespace content {
22 class WebContents;
25 namespace extensions {
27 // Interface for executing extension content scripts (e.g. executeScript) as
28 // described by the ExtensionMsg_ExecuteCode_Params IPC, and notifying the
29 // caller when responded with ExtensionHostMsg_ExecuteCodeFinished.
30 class ScriptExecutor {
31 public:
32 ScriptExecutor(
33 content::WebContents* web_contents,
34 // |script_observers| is assumed to be owned by |this|'s owner, and in
35 // such a way that |this| is destroyed first.
36 ObserverList<TabHelper::ScriptExecutionObserver>* script_observers);
38 ~ScriptExecutor();
40 // The type of script being injected.
41 enum ScriptType {
42 JAVASCRIPT,
43 CSS,
46 // The scope of the script injection across the frames.
47 enum FrameScope {
48 TOP_FRAME,
49 ALL_FRAMES,
52 // The type of world to inject into (main world, or its own isolated world).
53 enum WorldType {
54 MAIN_WORLD,
55 ISOLATED_WORLD,
58 // The type of process the target is.
59 enum ProcessType {
60 DEFAULT_PROCESS,
61 WEB_VIEW_PROCESS,
64 // The type of result the caller is interested in.
65 enum ResultType {
66 NO_RESULT,
67 JSON_SERIALIZED_RESULT,
70 // Callback from ExecuteScript. The arguments are (error, on_page_id, on_url,
71 // result). Success is implied by an empty error.
72 typedef base::Callback<void(const std::string&, int32, const GURL&,
73 const base::ListValue&)>
74 ExecuteScriptCallback;
76 // Executes a script. The arguments match ExtensionMsg_ExecuteCode_Params in
77 // extension_messages.h (request_id is populated automatically).
79 // |callback| will always be called even if the IPC'd renderer is destroyed
80 // before a response is received (in this case the callback will be with a
81 // failure and appropriate error message).
82 void ExecuteScript(const std::string& extension_id,
83 ScriptType script_type,
84 const std::string& code,
85 FrameScope frame_scope,
86 UserScript::RunLocation run_at,
87 WorldType world_type,
88 ProcessType process_type,
89 const GURL& file_url,
90 ResultType result_type,
91 const ExecuteScriptCallback& callback);
93 private:
94 // The next value to use for request_id in ExtensionMsg_ExecuteCode_Params.
95 int next_request_id_;
97 content::WebContents* web_contents_;
99 ObserverList<TabHelper::ScriptExecutionObserver>* script_observers_;
102 } // namespace extensions
104 #endif // CHROME_BROWSER_EXTENSIONS_SCRIPT_EXECUTOR_H_