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

Side by Side Diff: base/file_path.cc

Issue 16805: Move Contains() method to file_utils, stop relying on in extensions_protocol (Closed)
Patch Set: Review feedback Created 11 years, 11 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
OLDNEW
1 // Copyright (c) 2008 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2008 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 "base/file_path.h" 5 #include "base/file_path.h"
6 #include "base/file_util.h"
Erik does not do reviews 2009/01/12 17:14:05 maybe it's worth adding a comment here so that oth
7 #include "base/logging.h" 6 #include "base/logging.h"
8 7
9 // These includes are just for the *Hack functions, and should be removed 8 // These includes are just for the *Hack functions, and should be removed
10 // when those functions are removed. 9 // when those functions are removed.
11 #include "base/string_piece.h" 10 #include "base/string_piece.h"
12 #include "base/string_util.h" 11 #include "base/string_util.h"
13 #include "base/sys_string_conversions.h" 12 #include "base/sys_string_conversions.h"
14 13
15 #if defined(FILE_PATH_USES_WIN_SEPARATORS) 14 #if defined(FILE_PATH_USES_WIN_SEPARATORS)
16 const FilePath::CharType FilePath::kSeparators[] = FILE_PATH_LITERAL("\\/"); 15 const FilePath::CharType FilePath::kSeparators[] = FILE_PATH_LITERAL("\\/");
(...skipping 233 matching lines...) Expand 10 before | Expand all | Expand 10 after
250 } 249 }
251 250
252 FilePath FilePath::Append(const FilePath& component) const { 251 FilePath FilePath::Append(const FilePath& component) const {
253 return Append(component.value()); 252 return Append(component.value());
254 } 253 }
255 254
256 bool FilePath::IsAbsolute() const { 255 bool FilePath::IsAbsolute() const {
257 return IsPathAbsolute(path_); 256 return IsPathAbsolute(path_);
258 } 257 }
259 258
260 bool FilePath::Contains(const FilePath &other) const {
261 FilePath parent = FilePath(*this);
262 FilePath child = FilePath(other);
263
264 if (!file_util::AbsolutePath(&parent) || !file_util::AbsolutePath(&child))
265 return false;
266
267 #if defined(OS_WIN)
268 // file_util::AbsolutePath() does not flatten case on Windows, so we must do
269 // a case-insensitive compare.
270 if (!StartsWith(child.value(), parent.value(), false))
271 #else
272 if (!StartsWithASCII(child.value(), parent.value(), true))
273 #endif
274 return false;
275
276 // file_util::AbsolutePath() normalizes '/' to '\' on Windows, so we only need
277 // to check kSeparators[0].
278 if (child.value().length() <= parent.value().length() ||
279 child.value()[parent.value().length()] != kSeparators[0])
280 return false;
281
282 return true;
283 }
284
285 #if defined(OS_POSIX) 259 #if defined(OS_POSIX)
286 // See file_path.h for a discussion of the encoding of paths on POSIX 260 // See file_path.h for a discussion of the encoding of paths on POSIX
287 // platforms. These *Hack() functions are not quite correct, but they're 261 // platforms. These *Hack() functions are not quite correct, but they're
288 // only temporary while we fix the remainder of the code. 262 // only temporary while we fix the remainder of the code.
289 // Remember to remove the #includes at the top when you remove these. 263 // Remember to remove the #includes at the top when you remove these.
290 264
291 // static 265 // static
292 FilePath FilePath::FromWStringHack(const std::wstring& wstring) { 266 FilePath FilePath::FromWStringHack(const std::wstring& wstring) {
293 return FilePath(base::SysWideToNativeMB(wstring)); 267 return FilePath(base::SysWideToNativeMB(wstring));
294 } 268 }
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
326 --pos) { 300 --pos) {
327 // If the string only has two separators and they're at the beginning, 301 // If the string only has two separators and they're at the beginning,
328 // don't strip them, unless the string began with more than two separators. 302 // don't strip them, unless the string began with more than two separators.
329 if (pos != start + 1 || last_stripped == start + 2 || 303 if (pos != start + 1 || last_stripped == start + 2 ||
330 !IsSeparator(path_[start - 1])) { 304 !IsSeparator(path_[start - 1])) {
331 path_.resize(pos - 1); 305 path_.resize(pos - 1);
332 last_stripped = pos; 306 last_stripped = pos;
333 } 307 }
334 } 308 }
335 } 309 }
OLDNEW
« no previous file with comments | « base/file_path.h ('k') | base/file_path_unittest.cc » ('j') | base/file_util.h » ('J')

Powered by Google App Engine
This is Rietveld 408576698