Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(386)

Side by Side Diff: chrome/common/extensions/user_script.cc

Issue 12792005: Allow extensions on chrome:// URLs, when flag is set and permission is explicitly requested (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Remove allowed_schemes attribute from url_pattern; go back to re-using valid_schemes Created 7 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/common/extensions/user_script.h" 5 #include "chrome/common/extensions/user_script.h"
6 6
7 #include "base/pickle.h" 7 #include "base/pickle.h"
8 #include "base/string_util.h" 8 #include "base/string_util.h"
9 9
10 namespace { 10 namespace {
(...skipping 110 matching lines...) Expand 10 before | Expand all | Expand 10 after
121 glob != globs.end(); ++glob) { 121 glob != globs.end(); ++glob) {
122 pickle->WriteString(*glob); 122 pickle->WriteString(*glob);
123 } 123 }
124 } 124 }
125 125
126 void UserScript::PickleURLPatternSet(::Pickle* pickle, 126 void UserScript::PickleURLPatternSet(::Pickle* pickle,
127 const URLPatternSet& pattern_list) const { 127 const URLPatternSet& pattern_list) const {
128 pickle->WriteUInt64(pattern_list.patterns().size()); 128 pickle->WriteUInt64(pattern_list.patterns().size());
129 for (URLPatternSet::const_iterator pattern = pattern_list.begin(); 129 for (URLPatternSet::const_iterator pattern = pattern_list.begin();
130 pattern != pattern_list.end(); ++pattern) { 130 pattern != pattern_list.end(); ++pattern) {
131 pickle->WriteString(pattern->GetAsString());
131 pickle->WriteInt(pattern->valid_schemes()); 132 pickle->WriteInt(pattern->valid_schemes());
132 pickle->WriteString(pattern->GetAsString());
133 } 133 }
134 } 134 }
135 135
136 void UserScript::PickleScripts(::Pickle* pickle, 136 void UserScript::PickleScripts(::Pickle* pickle,
137 const FileList& scripts) const { 137 const FileList& scripts) const {
138 pickle->WriteUInt64(scripts.size()); 138 pickle->WriteUInt64(scripts.size());
139 for (FileList::const_iterator file = scripts.begin(); 139 for (FileList::const_iterator file = scripts.begin();
140 file != scripts.end(); ++file) { 140 file != scripts.end(); ++file) {
141 file->Pickle(pickle); 141 file->Pickle(pickle);
142 } 142 }
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
175 } 175 }
176 176
177 void UserScript::UnpickleURLPatternSet(const ::Pickle& pickle, 177 void UserScript::UnpickleURLPatternSet(const ::Pickle& pickle,
178 PickleIterator* iter, 178 PickleIterator* iter,
179 URLPatternSet* pattern_list) { 179 URLPatternSet* pattern_list) {
180 uint64 num_patterns = 0; 180 uint64 num_patterns = 0;
181 CHECK(pickle.ReadUInt64(iter, &num_patterns)); 181 CHECK(pickle.ReadUInt64(iter, &num_patterns));
182 182
183 pattern_list->ClearPatterns(); 183 pattern_list->ClearPatterns();
184 for (uint64 i = 0; i < num_patterns; ++i) { 184 for (uint64 i = 0; i < num_patterns; ++i) {
185 std::string pattern_str;
186 URLPattern pattern(kValidUserScriptSchemes);
187 CHECK(pickle.ReadString(iter, &pattern_str));
188
189 URLPattern::ParseResult result = pattern.Parse(pattern_str);
190 CHECK(URLPattern::PARSE_SUCCESS == result) <<
191 URLPattern::GetParseResultString(result) << " " << pattern_str.c_str();
192
185 int valid_schemes; 193 int valid_schemes;
186 CHECK(pickle.ReadInt(iter, &valid_schemes)); 194 CHECK(pickle.ReadInt(iter, &valid_schemes));
187 std::string pattern_str; 195 pattern.SetValidSchemes(valid_schemes);
188 URLPattern pattern(valid_schemes);
189 CHECK(pickle.ReadString(iter, &pattern_str));
190
191 // We remove the file scheme if it's not actually allowed (see Extension::
192 // LoadUserScriptHelper), but we need it temporarily while loading the
193 // pattern so that it's valid.
194 bool had_file_scheme = (valid_schemes & URLPattern::SCHEME_FILE) != 0;
195 if (!had_file_scheme)
196 pattern.SetValidSchemes(valid_schemes | URLPattern::SCHEME_FILE);
197 CHECK(URLPattern::PARSE_SUCCESS == pattern.Parse(pattern_str));
198 if (!had_file_scheme)
199 pattern.SetValidSchemes(valid_schemes);
200
201 pattern_list->AddPattern(pattern); 196 pattern_list->AddPattern(pattern);
202 } 197 }
203 } 198 }
204 199
205 void UserScript::UnpickleScripts(const ::Pickle& pickle, PickleIterator* iter, 200 void UserScript::UnpickleScripts(const ::Pickle& pickle, PickleIterator* iter,
206 FileList* scripts) { 201 FileList* scripts) {
207 uint64 num_files = 0; 202 uint64 num_files = 0;
208 CHECK(pickle.ReadUInt64(iter, &num_files)); 203 CHECK(pickle.ReadUInt64(iter, &num_files));
209 scripts->clear(); 204 scripts->clear();
210 for (uint64 i = 0; i < num_files; ++i) { 205 for (uint64 i = 0; i < num_files; ++i) {
211 File file; 206 File file;
212 file.Unpickle(pickle, iter); 207 file.Unpickle(pickle, iter);
213 scripts->push_back(file); 208 scripts->push_back(file);
214 } 209 }
215 } 210 }
216 211
217 } // namespace extensions 212 } // namespace extensions
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698