Chromium Code Reviews| Index: extensions/renderer/script_injection.h |
| diff --git a/extensions/renderer/script_injection.h b/extensions/renderer/script_injection.h |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..3d5c5bbedb4e086f29840d03e21518c86cb20d4b |
| --- /dev/null |
| +++ b/extensions/renderer/script_injection.h |
| @@ -0,0 +1,107 @@ |
| +// Copyright 2014 The Chromium Authors. All rights reserved. |
| +// Use of this source code is governed by a BSD-style license that can be |
| +// found in the LICENSE file. |
| + |
| +#ifndef EXTENSIONS_RENDERER_SCRIPT_INJECTION_H_ |
| +#define EXTENSIONS_RENDERER_SCRIPT_INJECTION_H_ |
| + |
| +#include <map> |
| +#include <set> |
| +#include <string> |
| + |
| +#include "base/macros.h" |
| +#include "base/memory/scoped_ptr.h" |
| +#include "base/timer/elapsed_timer.h" |
| +#include "extensions/common/user_script.h" |
| + |
| +class GURL; |
| + |
| +namespace blink { |
| +class WebFrame; |
| +} |
| + |
| +namespace extensions { |
| +class UserScriptSlave; |
| + |
| +// This class is a wrapper around a UserScript that knows how to inject itself |
| +// into a frame. |
| +class ScriptInjection { |
| + public: |
| + // Map of extensions IDs to the executing script paths. |
| + typedef std::map<std::string, std::set<std::string> > ExecutingScriptsMap; |
| + |
| + // A struct containing information about a script run. |
| + struct ScriptsRunInfo { |
| + ScriptsRunInfo(); |
| + ~ScriptsRunInfo(); |
| + |
| + // The number of CSS scripts injected. |
| + size_t num_css; |
| + // The number of JS scripts injected. |
| + size_t num_js; |
| + // A map of extension ids to executing script paths. |
| + ExecutingScriptsMap executing_scripts; |
| + // The elapsed time since the ScriptsRunInfo was constructed. |
| + base::ElapsedTimer timer; |
| + |
| + private: |
| + 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(); |
| + |
| + // 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, |
| + UserScript::RunLocation run_location, |
| + const GURL& document_url) const; |
| + |
| + // Injects the script into the given |frame|, and stores the information about |
|
not at google - send to devlin
2014/05/15 23:23:21
s/stores/updates
or something to imply that this
Devlin
2014/05/16 22:32:20
Done.
|
| + // the run into |scripts_run_info|. |
| + void Inject(blink::WebFrame* frame, |
| + UserScript::RunLocation run_location, |
| + ScriptsRunInfo* scripts_run_info) const; |
| + |
| + const std::string& extension_id() { return extension_id_; } |
| + |
| + private: |
| + // 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; |
| + |
| + // 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; |
| + |
| + // The UserScript this is injecting. |
| + scoped_ptr<UserScript> script_; |
| + |
| + // The associated extension's id. This is a safe const&, since it is owned by |
| + // the |user_script_|. |
| + const std::string& extension_id_; |
| + |
| + // 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_; |
| + |
| + // True if the script is a standalone script or emulates greasemonkey. |
| + bool is_standalone_or_emulate_greasemonkey_; |
| + |
| + DISALLOW_COPY_AND_ASSIGN(ScriptInjection); |
| +}; |
| + |
| +} // namespace extensions |
| + |
| +#endif // EXTENSIONS_RENDERER_SCRIPT_INJECTION_H_ |