summaryrefslogtreecommitdiffstats
path: root/chrome/common/extensions
diff options
context:
space:
mode:
authoraa@chromium.org <aa@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-04-07 08:01:50 +0000
committeraa@chromium.org <aa@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-04-07 08:01:50 +0000
commit4259f9cc708d8f67d7f935d267da9a7ffa852b65 (patch)
tree48992e2008df8ff57c600b65f71946774ab074e3 /chrome/common/extensions
parent86fd92283a371973f175b34f39ba8dd6ef86d7bc (diff)
downloadchromium_src-4259f9cc708d8f67d7f935d267da9a7ffa852b65.zip
chromium_src-4259f9cc708d8f67d7f935d267da9a7ffa852b65.tar.gz
chromium_src-4259f9cc708d8f67d7f935d267da9a7ffa852b65.tar.bz2
Implement chromium.self in content scripts, so that developers don't
have to know and copy/paste their extension ID. This required moving the code that defaults the extension ID earlier in the load process. Also fixed some bugs: * fixed a bug that was causing all user scripts to get executed in the same context. * made the greasemonkey api only available in 'standalone' user scripts. * re-added the anonymous function wrapper that is supposed to wrap content scripts. Also added unit tests for the fixed bugs. Review URL: http://codereview.chromium.org/60112 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@13238 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/common/extensions')
-rw-r--r--chrome/common/extensions/user_script.cc6
-rw-r--r--chrome/common/extensions/user_script.h9
2 files changed, 15 insertions, 0 deletions
diff --git a/chrome/common/extensions/user_script.cc b/chrome/common/extensions/user_script.cc
index 69fe5f4..abe9280 100644
--- a/chrome/common/extensions/user_script.cc
+++ b/chrome/common/extensions/user_script.cc
@@ -40,6 +40,9 @@ void UserScript::Pickle(::Pickle* pickle) const {
// Write the run location.
pickle->WriteInt(run_location());
+ // Write the extension id.
+ pickle->WriteString(extension_id());
+
// Write globs.
pickle->WriteSize(globs_.size());
for (std::vector<std::string>::const_iterator glob = globs_.begin();
@@ -76,6 +79,9 @@ void UserScript::Unpickle(const ::Pickle& pickle, void** iter) {
CHECK(run_location >= 0 && run_location < RUN_LOCATION_LAST);
run_location_ = static_cast<RunLocation>(run_location);
+ // Read the extension ID.
+ CHECK(pickle.ReadString(iter, &extension_id_));
+
// Read globs.
size_t num_globs = 0;
CHECK(pickle.ReadSize(iter, &num_globs));
diff --git a/chrome/common/extensions/user_script.h b/chrome/common/extensions/user_script.h
index 1a8d6df..070ead3 100644
--- a/chrome/common/extensions/user_script.h
+++ b/chrome/common/extensions/user_script.h
@@ -111,6 +111,11 @@ class UserScript {
FileList& css_scripts() { return css_scripts_; }
const FileList& css_scripts() const { return css_scripts_; }
+ const std::string& extension_id() const { return extension_id_; }
+ void set_extension_id(const std::string& id) { extension_id_ = id; }
+
+ bool is_standalone() { return extension_id_.empty(); }
+
// Returns true if the script should be applied to the specified URL, false
// otherwise.
bool MatchesUrl(const GURL& url);
@@ -141,6 +146,10 @@ class UserScript {
// List of css scripts defined in content_scripts
FileList css_scripts_;
+
+ // The ID of the extension this script is a part of, if any. Can be empty if
+ // the script is a "standlone" user script.
+ std::string extension_id_;
};
typedef std::vector<UserScript> UserScriptList;