1116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// Copyright 2014 The Chromium Authors. All rights reserved. 2116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// Use of this source code is governed by a BSD-style license that can be 3116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// found in the LICENSE file. 4116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 5116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#ifndef EXTENSIONS_RENDERER_PROGRAMMATIC_SCRIPT_INJECTOR_H_ 6116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#define EXTENSIONS_RENDERER_PROGRAMMATIC_SCRIPT_INJECTOR_H_ 7116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 8116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "base/macros.h" 9116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "base/memory/scoped_ptr.h" 10116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "extensions/renderer/script_injection.h" 11116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "url/gurl.h" 12116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 13116680a4aac90f2aa7413d9095a592090648e557Ben Murdochstruct ExtensionMsg_ExecuteCode_Params; 14116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 15116680a4aac90f2aa7413d9095a592090648e557Ben Murdochnamespace blink { 16116680a4aac90f2aa7413d9095a592090648e557Ben Murdochclass WebFrame; 17116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} 18116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 19116680a4aac90f2aa7413d9095a592090648e557Ben Murdochnamespace content { 20116680a4aac90f2aa7413d9095a592090648e557Ben Murdochclass RenderView; 21116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} 22116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 23116680a4aac90f2aa7413d9095a592090648e557Ben Murdochnamespace extensions { 24116680a4aac90f2aa7413d9095a592090648e557Ben Murdochclass Extension; 25116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 26116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// A ScriptInjector to handle tabs.executeScript(). 27116680a4aac90f2aa7413d9095a592090648e557Ben Murdochclass ProgrammaticScriptInjector : public ScriptInjector { 28116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch public: 29116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ProgrammaticScriptInjector(const ExtensionMsg_ExecuteCode_Params& params, 30116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch blink::WebFrame* web_frame); 31116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch virtual ~ProgrammaticScriptInjector(); 32116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 33116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch private: 34116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // ScriptInjector implementation. 35116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch virtual UserScript::InjectionType script_type() const OVERRIDE; 36116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch virtual bool ShouldExecuteInChildFrames() const OVERRIDE; 37116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch virtual bool ShouldExecuteInMainWorld() const OVERRIDE; 38116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch virtual bool IsUserGesture() const OVERRIDE; 39116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch virtual bool ExpectsResults() const OVERRIDE; 40116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch virtual bool ShouldInjectJs( 41116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch UserScript::RunLocation run_location) const OVERRIDE; 42116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch virtual bool ShouldInjectCss( 43116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch UserScript::RunLocation run_location) const OVERRIDE; 44116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch virtual PermissionsData::AccessType CanExecuteOnFrame( 45116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const Extension* extension, 46116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch blink::WebFrame* web_frame, 47116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch int tab_id, 48116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const GURL& top_url) const OVERRIDE; 49116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch virtual std::vector<blink::WebScriptSource> GetJsSources( 50116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch UserScript::RunLocation run_location) const OVERRIDE; 51116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch virtual std::vector<std::string> GetCssSources( 52116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch UserScript::RunLocation run_location) const OVERRIDE; 53116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch virtual void OnInjectionComplete( 54116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch scoped_ptr<base::ListValue> execution_results, 55116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ScriptsRunInfo* scripts_run_info, 56116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch UserScript::RunLocation run_location) OVERRIDE; 57116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch virtual void OnWillNotInject(InjectFailureReason reason) OVERRIDE; 58116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 59116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // Return the run location for this injector. 60116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch UserScript::RunLocation GetRunLocation() const; 61116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 62116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // Notify the browser that the script was injected (or never will be), and 63116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // send along any results or errors. 64116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch void Finish(const std::string& error); 65116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 66116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // The parameters for injecting the script. 67116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch scoped_ptr<ExtensionMsg_ExecuteCode_Params> params_; 68116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 69116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // The url of the frame into which we are injecting. 70116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch GURL url_; 71116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 72116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // The RenderView to which we send the response upon completion. 73116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch content::RenderView* render_view_; 74116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 75116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // The results of the script execution. 76116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch scoped_ptr<base::ListValue> results_; 77116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 78116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // Whether or not this script injection has finished. 79116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch bool finished_; 80116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 81116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch DISALLOW_COPY_AND_ASSIGN(ProgrammaticScriptInjector); 82116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch}; 83116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 84116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} // namespace extensions 85116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 86116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif // EXTENSIONS_RENDERER_PROGRAMMATIC_SCRIPT_INJECTOR_H_ 87