Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(95)

Unified Diff: extensions/renderer/script_injection.h

Issue 321993003: Refactor renderer-side script injection (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Missing files Created 6 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: extensions/renderer/script_injection.h
diff --git a/extensions/renderer/script_injection.h b/extensions/renderer/script_injection.h
index 17c18dea93540c02cec2a68ef8aa60ddcaa28ad8..80a2a91e5af4324eec900283c66382383513a805 100644
--- a/extensions/renderer/script_injection.h
+++ b/extensions/renderer/script_injection.h
@@ -6,31 +6,22 @@
#define EXTENSIONS_RENDERER_SCRIPT_INJECTION_H_
#include <map>
-#include <set>
-#include <string>
+#include <vector>
#include "base/basictypes.h"
#include "base/macros.h"
-#include "base/memory/scoped_ptr.h"
-#include "base/memory/scoped_vector.h"
#include "base/timer/elapsed_timer.h"
#include "extensions/common/user_script.h"
-class GURL;
-
namespace blink {
class WebFrame;
}
-namespace content {
-class RenderView;
-}
-
namespace extensions {
-class UserScriptSlave;
+class Extension;
-// This class is a wrapper around a UserScript that knows how to inject itself
-// into a frame.
+// An abstract script wrapper which is aware of whether or not it is allowed
+// to execute, and contains the implementation to do so.
class ScriptInjection {
public:
// Map of extensions IDs to the executing script paths.
@@ -54,89 +45,48 @@ class ScriptInjection {
DISALLOW_COPY_AND_ASSIGN(ScriptsRunInfo);
};
- // Return the URL to use as the document url when checking permissions for
- // script injection.
- static GURL GetDocumentUrlForFrame(blink::WebFrame* frame);
-
- ScriptInjection(scoped_ptr<UserScript> script,
- UserScriptSlave* user_script_slave);
- ~ScriptInjection();
-
- // Inject the script into the given |frame| if the script should run on the
- // frame and has permission to do so. If the script requires user consent,
- // this will register a pending request to inject at a later time.
- // If the script is run immediately, |scripts_run_info| is updated with
- // information about the run.
- void InjectIfAllowed(blink::WebFrame* frame,
- UserScript::RunLocation location,
- const GURL& document_url,
- ScriptsRunInfo* scripts_run_info);
-
- // If a request with the given |request_id| exists, runs that request and
- // modifies |scripts_run_info| with information about the run. Otherwise, does
- // nothing.
- // If |frame_out| is non-NULL and a script was run, |frame_out| will be
- // populated with the frame in which the script was run.
- // Returns true if the request was found *and* the script was run.
- bool NotifyScriptPermitted(int64 request_id,
- content::RenderView* render_view,
- ScriptsRunInfo* scripts_run_info,
- blink::WebFrame** frame_out);
-
- // Notififies the Injection that the frame has been detached (i.e. is about
- // to be destroyed).
- void FrameDetached(blink::WebFrame* frame);
-
- void SetScript(scoped_ptr<UserScript> script);
-
- const std::string& extension_id() { return extension_id_; }
- const UserScript* script() { return script_.get(); }
-
- private:
- struct PendingInjection;
-
- // Returns true if this ScriptInjection wants to run on the given |frame| at
- // the given |run_location| (i.e., if this script would inject either JS or
- // CSS).
- bool WantsToRun(blink::WebFrame* frame,
+ ScriptInjection(blink::WebFrame* web_frame,
+ const std::string& extension_id,
UserScript::RunLocation run_location,
- const GURL& document_url) const;
-
- // Returns true if the script will inject [css|js] at the given
- // |run_location|.
- bool ShouldInjectJS(UserScript::RunLocation run_location) const;
- bool ShouldInjectCSS(UserScript::RunLocation run_location) const;
+ int tab_id);
+ virtual ~ScriptInjection();
- // Injects the script into the given |frame|, and updates |scripts_run_info|
- // information about the run.
- void Inject(blink::WebFrame* frame,
- UserScript::RunLocation run_location,
- ScriptsRunInfo* scripts_run_info) const;
+ // Gets the isolated world ID to use for the given |extension| in the given
+ // |frame|. If no isolated world has been created for that extension,
+ // one will be created and initialized.
+ static int GetIsolatedWorldIdForExtension(const Extension* extension,
+ blink::WebFrame* web_frame);
- // Injects the [css|js] scripts into the frame, and stores the results of
- // the run in |scripts_run_info|.
- void InjectJS(blink::WebFrame* frame, ScriptsRunInfo* scripts_run_info) const;
- void InjectCSS(blink::WebFrame* frame, ScriptsRunInfo* scripts_run_info)
- const;
+ // Return the id of the extension associated with the given world.
+ static std::string GetExtensionIdForIsolatedWorld(int world_id);
- // The UserScript this is injecting.
- scoped_ptr<UserScript> script_;
+ // Remove the isolated world associated with the given extension.
+ static void RemoveIsolatedWorld(const std::string& extension_id);
- // The associated extension's id.
- std::string extension_id_;
+ // Called if the extension cannot be found, and the script will never execute.
+ virtual void ExtensionNotFound() {}
- // The associated UserScriptSlave.
- // It's unfortunate that this is needed, but we use it to get the isolated
- // world ids and the associated extensions.
- // TODO(rdevlin.cronin): It would be nice to clean this up more.
- UserScriptSlave* user_script_slave_;
+ // Returns true if the script is allowed to inject.
+ virtual bool Allowed(const Extension* extension) = 0;
- // True if the script is a standalone script or emulates greasemonkey.
- bool is_standalone_or_emulate_greasemonkey_;
+ // Injects the script into the associated frame.
+ virtual void Inject(ScriptsRunInfo* scripts_run_info,
+ const Extension* extension) = 0;
- ScopedVector<PendingInjection> pending_injections_;
+ const blink::WebFrame* web_frame() const { return web_frame_; }
+ blink::WebFrame* web_frame() { return web_frame_; }
+ UserScript::RunLocation run_location() const { return run_location_; }
+ const std::string& extension_id() const { return extension_id_; }
+ int tab_id() const { return tab_id_; }
+ int64 request_id() const { return request_id_; }
+ void set_request_id(int64 request_id) { request_id_ = request_id; }
- DISALLOW_COPY_AND_ASSIGN(ScriptInjection);
+ private:
+ blink::WebFrame* web_frame_;
+ std::string extension_id_;
+ UserScript::RunLocation run_location_;
+ int tab_id_;
+ int64 request_id_;
};
} // namespace extensions

Powered by Google App Engine
This is Rietveld 408576698