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#include "chrome/browser/safe_browsing/path_sanitizer.h"
6116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
7116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include <vector>
8116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
9116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "base/logging.h"
10116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "base/path_service.h"
11116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "testing/gtest/include/gtest/gtest.h"
12116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
13116680a4aac90f2aa7413d9095a592090648e557Ben Murdochnamespace {
14116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
15116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// Returns the root directory with a trailing separator. Works on all platforms.
16116680a4aac90f2aa7413d9095a592090648e557Ben Murdochbase::FilePath GetRootDirectory() {
17116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  base::FilePath dir_temp;
18116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  if (!PathService::Get(base::DIR_TEMP, &dir_temp))
19116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch    NOTREACHED();
20116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
21116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  std::vector<base::FilePath::StringType> components;
22116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  dir_temp.GetComponents(&components);
23116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
24116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  return base::FilePath(components[0]).AsEndingWithSeparator();
25116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch}
26116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
27116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch}  // namespace
28116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
29116680a4aac90f2aa7413d9095a592090648e557Ben MurdochTEST(SafeBrowsingPathSanitizerTest, HomeDirectoryIsNotEmpty) {
30116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  safe_browsing::PathSanitizer path_sanitizer;
31116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
32116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  ASSERT_FALSE(path_sanitizer.GetHomeDirectory().empty());
33116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch}
34116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
35116680a4aac90f2aa7413d9095a592090648e557Ben MurdochTEST(SafeBrowsingPathSanitizerTest, DontStripHomeDirectoryTest) {
36116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  // Test with path not in home directory.
37116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  base::FilePath path =
38116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      GetRootDirectory().Append(FILE_PATH_LITERAL("not_in_home_directory.ext"));
39116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  base::FilePath path_expected = path;
40116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
41116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  safe_browsing::PathSanitizer path_sanitizer;
42116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  path_sanitizer.StripHomeDirectory(&path);
43116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
44116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  ASSERT_EQ(path.value(), path_expected.value());
45116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch}
46116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
47116680a4aac90f2aa7413d9095a592090648e557Ben MurdochTEST(SafeBrowsingPathSanitizerTest, DoStripHomeDirectoryTest) {
48116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  // Test with path in home directory.
49116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  safe_browsing::PathSanitizer path_sanitizer;
50116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
51116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  base::FilePath path = path_sanitizer.GetHomeDirectory().Append(
52116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      FILE_PATH_LITERAL("in_home_directory.ext"));
53116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  base::FilePath path_expected = base::FilePath(FILE_PATH_LITERAL("~")).Append(
54116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      FILE_PATH_LITERAL("in_home_directory.ext"));
55116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
56116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  path_sanitizer.StripHomeDirectory(&path);
57116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
58116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  ASSERT_EQ(path.value(), path_expected.value());
59116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch}
60