| Index: chrome/browser/extensions/user_script_master.h
|
| diff --git a/chrome/browser/extensions/user_script_master.h b/chrome/browser/extensions/user_script_master.h
|
| index 5167a65d4d1109f561142d88f9e600a0cf7e0a75..1c1b0950e50c4fedf202b864b955dc9257c7a236 100644
|
| --- a/chrome/browser/extensions/user_script_master.h
|
| +++ b/chrome/browser/extensions/user_script_master.h
|
| @@ -14,6 +14,8 @@
|
| #include "base/string_piece.h"
|
| #include "googleurl/src/gurl.h"
|
|
|
| +class Pickle;
|
| +
|
| struct UserScriptInfo {
|
| GURL url;
|
| FilePath path;
|
| @@ -32,6 +34,19 @@ class UserScriptMaster : public base::RefCounted<UserScriptMaster>,
|
| UserScriptMaster(MessageLoop* worker, const FilePath& script_dir);
|
| ~UserScriptMaster();
|
|
|
| + // Add a single user script that exists outside the script directory.
|
| + void AddLoneScript(const UserScriptInfo& script) {
|
| + lone_scripts_.push_back(script);
|
| + }
|
| +
|
| + // Add a watched directory. All scripts will be reloaded when any file in
|
| + // this directory changes.
|
| + void AddWatchedPath(const FilePath& path);
|
| +
|
| + // Kicks off a process on the file thread to reload scripts from disk
|
| + // into a new chunk of shared memory and notify renderers.
|
| + void StartScan();
|
| +
|
| // Gets the segment of shared memory for the scripts.
|
| base::SharedMemory* GetSharedMemory() const {
|
| return shared_memory_.get();
|
| @@ -44,7 +59,7 @@ class UserScriptMaster : public base::RefCounted<UserScriptMaster>,
|
| bool ScriptsReady() const { return shared_memory_.get() != NULL; }
|
|
|
| // Returns the path to the directory user scripts are stored in.
|
| - FilePath user_script_dir() const { return *user_script_dir_; }
|
| + FilePath user_script_dir() const { return user_script_dir_; }
|
|
|
| private:
|
| FRIEND_TEST(UserScriptMasterTest, Parse1);
|
| @@ -69,7 +84,8 @@ class UserScriptMaster : public base::RefCounted<UserScriptMaster>,
|
|
|
| // Start a scan for scripts.
|
| // Will always send a message to the master upon completion.
|
| - void StartScan(MessageLoop* work_loop, const FilePath& script_dir);
|
| + void StartScan(MessageLoop* work_loop, const FilePath& script_dir,
|
| + const UserScriptList &external_scripts);
|
|
|
| // The master is going away; don't call it back.
|
| void DisownMaster() {
|
| @@ -89,15 +105,20 @@ class UserScriptMaster : public base::RefCounted<UserScriptMaster>,
|
| void NotifyMaster(base::SharedMemory* memory);
|
|
|
| // Runs on the File thread.
|
| - // Scan the script directory for scripts, calling NotifyMaster when done.
|
| - // The path is intentionally passed by value so its lifetime isn't tied
|
| - // to the caller.
|
| - void RunScan(const FilePath script_dir);
|
| + // Scan the specified directory and lone scripts, calling NotifyMaster when
|
| + // done. The parameters are intentionally passed by value so their lifetimes
|
| + // aren't tied to the caller.
|
| + void RunScan(const FilePath script_dir, const UserScriptList lone_scripts);
|
|
|
| // Runs on the File thread.
|
| - // Scan the script directory for scripts, returning either a
|
| - // new SharedMemory or NULL on error.
|
| - base::SharedMemory* GetNewScripts(const FilePath& script_dir);
|
| + // Scan the script directory and lone scripts, returning either a new
|
| + // SharedMemory or NULL on error.
|
| + base::SharedMemory* GetNewScripts(const FilePath& script_dir,
|
| + const UserScriptList& lone_scripts);
|
| +
|
| + // Serialize script metadata and contents into the specified pickle.
|
| + void PickleScriptData(const UserScriptInfo& script,
|
| + const std::string& contents, Pickle* pickle);
|
|
|
| // A pointer back to our master.
|
| // May be NULL if DisownMaster() is called.
|
| @@ -113,15 +134,11 @@ class UserScriptMaster : public base::RefCounted<UserScriptMaster>,
|
| // DirectoryWatcher::Delegate implementation.
|
| virtual void OnDirectoryChanged(const FilePath& path);
|
|
|
| - // Kicks off a process on the file thread to reload scripts from disk
|
| - // into a new chunk of shared memory and notify renderers.
|
| - void StartScan();
|
| -
|
| - // The directory containing user scripts.
|
| - scoped_ptr<FilePath> user_script_dir_;
|
| + // The directories containing user scripts.
|
| + FilePath user_script_dir_;
|
|
|
| // The watcher watches the profile's user scripts directory for new scripts.
|
| - scoped_ptr<DirectoryWatcher> dir_watcher_;
|
| + std::vector<DirectoryWatcher*> dir_watchers_;
|
|
|
| // The MessageLoop that the scanner worker runs on.
|
| // Typically the file thread; configurable for testing.
|
| @@ -134,6 +151,9 @@ class UserScriptMaster : public base::RefCounted<UserScriptMaster>,
|
| // Contains the scripts that were found the last time scripts were updated.
|
| scoped_ptr<base::SharedMemory> shared_memory_;
|
|
|
| + // List of scripts outside of script directories we should also load.
|
| + UserScriptList lone_scripts_;
|
| +
|
| // If the script directory is modified while we're rescanning it, we note
|
| // that we're currently mid-scan and then start over again once the scan
|
| // finishes. This boolean tracks whether another scan is pending.
|
|
|