Upstream version 11.40.277.0
[platform/framework/web/crosswalk.git] / src / chrome / browser / chromeos / file_manager / url_util_unittest.cc
1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "chrome/browser/chromeos/file_manager/url_util.h"
6
7 #include "base/files/file_path.h"
8 #include "base/json/json_reader.h"
9 #include "base/json/json_writer.h"
10 #include "base/memory/scoped_ptr.h"
11 #include "base/strings/utf_string_conversions.h"
12 #include "base/values.h"
13 #include "net/base/escape.h"
14 #include "testing/gtest/include/gtest/gtest.h"
15
16 namespace file_manager {
17 namespace util {
18 namespace {
19
20 // Pretty print the JSON escaped in the query string.
21 std::string PrettyPrintEscapedJson(const std::string& query) {
22   const std::string json = net::UnescapeURLComponent(
23       query, net::UnescapeRule::SPACES | net::UnescapeRule::URL_SPECIAL_CHARS);
24   scoped_ptr<base::Value> value(base::JSONReader::Read(json));
25   std::string pretty_json;
26   base::JSONWriter::WriteWithOptions(value.get(),
27                                      base::JSONWriter::OPTIONS_PRETTY_PRINT,
28                                      &pretty_json);
29   return pretty_json;
30 }
31
32 TEST(FileManagerUrlUtilTest, GetFileManagerMainPageUrl) {
33   EXPECT_EQ("chrome-extension://hhaomjibdihmijegdhdafkllkbggdgoj/main.html",
34             GetFileManagerMainPageUrl().spec());
35 }
36
37 TEST(FileManagerUrlUtilTest, GetFileManagerMainPageUrlWithParams_NoFileTypes) {
38   const GURL url = GetFileManagerMainPageUrlWithParams(
39       ui::SelectFileDialog::SELECT_OPEN_FILE,
40       base::UTF8ToUTF16("some title"),
41       GURL("filesystem:chrome-extension://abc/Downloads/"),
42       GURL("filesystem:chrome-extension://abc/Downloads/foo.txt"),
43       "foo.txt",
44       NULL,  // No file types
45       0,  // Hence no file type index.
46       FILE_PATH_LITERAL("txt"));
47   EXPECT_EQ("chrome-extension", url.scheme());
48   EXPECT_EQ("hhaomjibdihmijegdhdafkllkbggdgoj", url.host());
49   EXPECT_EQ("/main.html", url.path());
50   // Confirm that "%20" is used instead of "+" in the query.
51   EXPECT_TRUE(url.query().find("+") == std::string::npos);
52   EXPECT_TRUE(url.query().find("%20") != std::string::npos);
53   // The escaped query is hard to read. Pretty print the escaped JSON.
54   EXPECT_EQ("{\n"
55             "   \"currentDirectoryURL\": "
56             "\"filesystem:chrome-extension://abc/Downloads/\",\n"
57             "   \"defaultExtension\": \"txt\",\n"
58             "   \"selectionURL\": "
59             "\"filesystem:chrome-extension://abc/Downloads/foo.txt\",\n"
60             "   \"shouldReturnLocalPath\": true,\n"
61             "   \"targetName\": \"foo.txt\",\n"
62             "   \"title\": \"some title\",\n"
63             "   \"type\": \"open-file\"\n"
64             "}\n",
65             PrettyPrintEscapedJson(url.query()));
66 }
67
68 TEST(FileManagerUrlUtilTest,
69      GetFileManagerMainPageUrlWithParams_WithFileTypes) {
70   // Create a FileTypeInfo which looks like:
71   // extensions: [["htm", "html"], ["txt"]]
72   // descriptions: ["HTML", "TEXT"]
73   ui::SelectFileDialog::FileTypeInfo file_types;
74   file_types.extensions.push_back(std::vector<base::FilePath::StringType>());
75   file_types.extensions[0].push_back(FILE_PATH_LITERAL("htm"));
76   file_types.extensions[0].push_back(FILE_PATH_LITERAL("html"));
77   file_types.extensions.push_back(std::vector<base::FilePath::StringType>());
78   file_types.extensions[1].push_back(FILE_PATH_LITERAL("txt"));
79   file_types.extension_description_overrides.push_back(
80       base::UTF8ToUTF16("HTML"));
81   file_types.extension_description_overrides.push_back(
82       base::UTF8ToUTF16("TEXT"));
83   // "shouldReturnLocalPath" will be false if drive is supported.
84   file_types.support_drive = true;
85
86   const GURL url = GetFileManagerMainPageUrlWithParams(
87       ui::SelectFileDialog::SELECT_OPEN_FILE,
88       base::UTF8ToUTF16("some title"),
89       GURL("filesystem:chrome-extension://abc/Downloads/"),
90       GURL("filesystem:chrome-extension://abc/Downloads/foo.txt"),
91       "foo.txt",
92       &file_types,
93       1,  // The file type index is 1-based.
94       FILE_PATH_LITERAL("txt"));
95   EXPECT_EQ("chrome-extension", url.scheme());
96   EXPECT_EQ("hhaomjibdihmijegdhdafkllkbggdgoj", url.host());
97   EXPECT_EQ("/main.html", url.path());
98   // Confirm that "%20" is used instead of "+" in the query.
99   EXPECT_TRUE(url.query().find("+") == std::string::npos);
100   EXPECT_TRUE(url.query().find("%20") != std::string::npos);
101   // The escaped query is hard to read. Pretty print the escaped JSON.
102   EXPECT_EQ("{\n"
103             "   \"currentDirectoryURL\": "
104             "\"filesystem:chrome-extension://abc/Downloads/\",\n"
105             "   \"defaultExtension\": \"txt\",\n"
106             "   \"includeAllFiles\": false,\n"
107             "   \"selectionURL\": "
108             "\"filesystem:chrome-extension://abc/Downloads/foo.txt\",\n"
109             "   \"shouldReturnLocalPath\": false,\n"
110             "   \"targetName\": \"foo.txt\",\n"
111             "   \"title\": \"some title\",\n"
112             "   \"type\": \"open-file\",\n"
113             "   \"typeList\": [ {\n"
114             "      \"description\": \"HTML\",\n"
115             "      \"extensions\": [ \"htm\", \"html\" ],\n"
116             "      \"selected\": true\n"
117             "   }, {\n"
118             "      \"description\": \"TEXT\",\n"
119             "      \"extensions\": [ \"txt\" ],\n"
120             "      \"selected\": false\n"
121             "   } ]\n"
122             "}\n",
123             PrettyPrintEscapedJson(url.query()));
124 }
125
126 }  // namespace
127 }  // namespace util
128 }  // namespace file_manager