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_USER_SCRIPT_SET_H_ 6116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#define EXTENSIONS_RENDERER_USER_SCRIPT_SET_H_ 7116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 8116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include <set> 9116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include <string> 10116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 11116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "base/basictypes.h" 12116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "base/macros.h" 13116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "base/memory/scoped_ptr.h" 14116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "base/memory/scoped_vector.h" 15116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "base/memory/shared_memory.h" 16116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "base/observer_list.h" 17116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "content/public/renderer/render_process_observer.h" 18116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "extensions/common/user_script.h" 19116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 20116680a4aac90f2aa7413d9095a592090648e557Ben Murdochclass GURL; 21116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 22116680a4aac90f2aa7413d9095a592090648e557Ben Murdochnamespace blink { 23116680a4aac90f2aa7413d9095a592090648e557Ben Murdochclass WebFrame; 24116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} 25116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 26116680a4aac90f2aa7413d9095a592090648e557Ben Murdochnamespace extensions { 27116680a4aac90f2aa7413d9095a592090648e557Ben Murdochclass Extension; 28116680a4aac90f2aa7413d9095a592090648e557Ben Murdochclass ExtensionSet; 29116680a4aac90f2aa7413d9095a592090648e557Ben Murdochclass ScriptInjection; 30116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 31116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// The UserScriptSet is a collection of UserScripts which knows how to update 32116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// itself from SharedMemory and create ScriptInjections for UserScripts to 33116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// inject on a page. 345f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)class UserScriptSet { 35116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch public: 36116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch class Observer { 37116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch public: 38116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch virtual void OnUserScriptsUpdated( 39116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const std::set<std::string>& changed_extensions, 40116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const std::vector<UserScript*>& scripts) = 0; 41116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch }; 42116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 435f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) explicit UserScriptSet(const ExtensionSet* extensions); 445f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ~UserScriptSet(); 45116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 46116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // Adds or removes observers. 47116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch void AddObserver(Observer* observer); 48116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch void RemoveObserver(Observer* observer); 49116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 50116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // Appends the ids of the extensions that have user scripts to |ids|. 51116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch void GetActiveExtensionIds(std::set<std::string>* ids) const; 52116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 53116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // Populate |injections| with any ScriptInjections that should run on the 54116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // given |web_frame| and |tab_id|, at the given |run_location|. 55116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // |extensions| is passed in to verify the corresponding extension is still 56116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // valid. 57116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch void GetInjections(ScopedVector<ScriptInjection>* injections, 58116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch blink::WebFrame* web_frame, 59116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch int tab_id, 60116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch UserScript::RunLocation run_location); 61116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 621320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci scoped_ptr<ScriptInjection> GetDeclarativeScriptInjection( 631320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci int script_id, 641320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci blink::WebFrame* web_frame, 651320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci int tab_id, 661320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci UserScript::RunLocation run_location, 671320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const GURL& document_url, 681320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const Extension* extension); 691320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 705f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // Updates scripts given the shared memory region containing user scripts. 715f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) // Returns true if the scripts were successfully updated. 725f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) bool UpdateUserScripts(base::SharedMemoryHandle shared_memory, 735f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) const std::set<std::string>& changed_extensions); 74116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 755f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) const std::vector<UserScript*>& scripts() const { return scripts_.get(); } 76116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 775f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) private: 78116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // Returns a new ScriptInjection for the given |script| to execute in the 79116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // |web_frame|, or NULL if the script should not execute. 80116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch scoped_ptr<ScriptInjection> GetInjectionForScript( 81116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch UserScript* script, 82116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch blink::WebFrame* web_frame, 83116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch int tab_id, 84116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch UserScript::RunLocation run_location, 85116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const GURL& document_url, 861320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const Extension* extension, 871320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci bool is_declarative); 88116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 89116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // Shared memory containing raw script data. 90116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch scoped_ptr<base::SharedMemory> shared_memory_; 91116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 92116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // The set of all known extensions. Owned by the Dispatcher. 93116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const ExtensionSet* extensions_; 94116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 95116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // The UserScripts this injector manages. 96116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ScopedVector<UserScript> scripts_; 97116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 98116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // The associated observers. 99116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ObserverList<Observer> observers_; 100116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 101116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch DISALLOW_COPY_AND_ASSIGN(UserScriptSet); 102116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch}; 103116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 104116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} // namespace extensions 105116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 106116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif // EXTENSIONS_RENDERER_USER_SCRIPT_SET_H_ 107