1 // Copyright 2019 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/ui/views/native_file_system/native_file_system_usage_bubble_view.h"
6
7 #include "base/files/file_path.h"
8 #include "chrome/browser/ui/browser.h"
9 #include "chrome/browser/ui/test/test_browser_dialog.h"
10 #include "content/public/test/browser_test.h"
11
12 class NativeFileSystemUsageBubbleViewTest : public DialogBrowserTest {
13 public:
14 // DialogBrowserTest:
ShowUi(const std::string & name)15 void ShowUi(const std::string& name) override {
16 NativeFileSystemUsageBubbleView::Usage usage;
17 url::Origin origin = kTestOrigin;
18 if (name == "SingleWritableFile") {
19 usage.writable_files.emplace_back(
20 FILE_PATH_LITERAL("/foo/bar/Shapes.sketch"));
21 } else if (name == "TwoWritableFiles") {
22 usage.writable_files.emplace_back(
23 FILE_PATH_LITERAL("/foo/bar/Shapes.sketch"));
24 usage.writable_files.emplace_back(FILE_PATH_LITERAL("/bla/README.txt"));
25 } else if (name == "SingleReadableFile") {
26 usage.readable_files.emplace_back(
27 FILE_PATH_LITERAL("/foo/bar/Shapes.sketch"));
28 } else if (name == "MultipleReadableFiles") {
29 usage.readable_files.emplace_back(
30 FILE_PATH_LITERAL("/foo/bar/Shapes.sketch"));
31 usage.readable_files.emplace_back(FILE_PATH_LITERAL("/bla/README.txt"));
32 } else if (name == "SingleWritableFolder") {
33 usage.writable_directories.emplace_back(
34 FILE_PATH_LITERAL("/foo/bar/Code"));
35 } else if (name == "MultipleWritableFolders") {
36 usage.writable_directories.emplace_back(
37 FILE_PATH_LITERAL("/foo/bar/Code"));
38 usage.writable_directories.emplace_back(
39 FILE_PATH_LITERAL("/baz/My Project"));
40 usage.writable_directories.emplace_back(FILE_PATH_LITERAL("/baz/Assets"));
41 usage.writable_directories.emplace_back(
42 FILE_PATH_LITERAL("/la/asdf/Processing"));
43 } else if (name == "WritableFilesAndFolders") {
44 usage.writable_files.emplace_back(
45 FILE_PATH_LITERAL("/foo/bar/Shapes.sketch"));
46 usage.writable_files.emplace_back(FILE_PATH_LITERAL("/bla/README.txt"));
47 usage.writable_directories.emplace_back(
48 FILE_PATH_LITERAL("/foo/bar/Code"));
49 } else if (name == "ReadableFilesAndFolders") {
50 usage.readable_files.emplace_back(
51 FILE_PATH_LITERAL("/foo/bar/Shapes.sketch"));
52 usage.readable_files.emplace_back(FILE_PATH_LITERAL("/bla/README.txt"));
53 usage.readable_directories.emplace_back(
54 FILE_PATH_LITERAL("/foo/bar/Code"));
55 } else if (name == "SingleReadableFolder") {
56 usage.readable_directories.emplace_back(
57 FILE_PATH_LITERAL("/foo/bar/Images"));
58 } else if (name == "MultipleReadableFolders") {
59 usage.readable_directories.emplace_back(
60 FILE_PATH_LITERAL("/foo/bar/Images"));
61 usage.readable_directories.emplace_back(
62 FILE_PATH_LITERAL("/baz/My Project"));
63 usage.readable_directories.emplace_back(FILE_PATH_LITERAL("/baz/Assets"));
64 } else if (name == "ReadableAndWritableFolders") {
65 usage.readable_directories.emplace_back(
66 FILE_PATH_LITERAL("/foo/bar/Images"));
67 usage.readable_directories.emplace_back(
68 FILE_PATH_LITERAL("/baz/My Project"));
69 usage.readable_directories.emplace_back(FILE_PATH_LITERAL("/baz/Assets"));
70 usage.writable_directories.emplace_back(FILE_PATH_LITERAL("/baz/Assets"));
71 usage.writable_directories.emplace_back(
72 FILE_PATH_LITERAL("/la/asdf/Processing"));
73 usage.writable_directories.emplace_back(FILE_PATH_LITERAL("/baz/Images"));
74 } else if (name == "LongOrigin") {
75 usage.writable_files.emplace_back(
76 FILE_PATH_LITERAL("/foo/bar/Shapes.sketch"));
77 usage.writable_files.emplace_back(FILE_PATH_LITERAL("/bla/README.txt"));
78 origin = url::Origin::Create(GURL(
79 "https://"
80 "some-really-long-origin-chrome-test-foo-bar-sample.appspot.com"));
81 } else if (name == "default") {
82 usage.readable_directories.emplace_back(
83 FILE_PATH_LITERAL("/home/me/Images"));
84 usage.readable_directories.emplace_back(
85 FILE_PATH_LITERAL("/foo/bar/Processing"));
86 usage.readable_directories.emplace_back(FILE_PATH_LITERAL("Assets"));
87 usage.writable_files.emplace_back(
88 FILE_PATH_LITERAL("/foo/bar/index.html"));
89 usage.writable_files.emplace_back(FILE_PATH_LITERAL("view.js"));
90 usage.writable_files.emplace_back(FILE_PATH_LITERAL("README.md"));
91 usage.writable_directories.emplace_back(
92 FILE_PATH_LITERAL("/foo/bar/Code"));
93 } else {
94 NOTREACHED() << "Unimplemented test: " << name;
95 }
96
97 NativeFileSystemUsageBubbleView::ShowBubble(
98 browser()->tab_strip_model()->GetActiveWebContents(), origin,
99 std::move(usage));
100 }
101
102 protected:
103 const url::Origin kTestOrigin =
104 url::Origin::Create(GURL("https://example.com"));
105 };
106
IN_PROC_BROWSER_TEST_F(NativeFileSystemUsageBubbleViewTest,InvokeUi_default)107 IN_PROC_BROWSER_TEST_F(NativeFileSystemUsageBubbleViewTest, InvokeUi_default) {
108 ShowAndVerifyUi();
109 }
110
IN_PROC_BROWSER_TEST_F(NativeFileSystemUsageBubbleViewTest,InvokeUi_SingleWritableFile)111 IN_PROC_BROWSER_TEST_F(NativeFileSystemUsageBubbleViewTest,
112 InvokeUi_SingleWritableFile) {
113 ShowAndVerifyUi();
114 }
115
IN_PROC_BROWSER_TEST_F(NativeFileSystemUsageBubbleViewTest,InvokeUi_TwoWritableFiles)116 IN_PROC_BROWSER_TEST_F(NativeFileSystemUsageBubbleViewTest,
117 InvokeUi_TwoWritableFiles) {
118 ShowAndVerifyUi();
119 }
120
IN_PROC_BROWSER_TEST_F(NativeFileSystemUsageBubbleViewTest,InvokeUi_SingleReadableFile)121 IN_PROC_BROWSER_TEST_F(NativeFileSystemUsageBubbleViewTest,
122 InvokeUi_SingleReadableFile) {
123 ShowAndVerifyUi();
124 }
125
IN_PROC_BROWSER_TEST_F(NativeFileSystemUsageBubbleViewTest,InvokeUi_MultipleReadableFiles)126 IN_PROC_BROWSER_TEST_F(NativeFileSystemUsageBubbleViewTest,
127 InvokeUi_MultipleReadableFiles) {
128 ShowAndVerifyUi();
129 }
130
IN_PROC_BROWSER_TEST_F(NativeFileSystemUsageBubbleViewTest,InvokeUi_SingleWritableFolder)131 IN_PROC_BROWSER_TEST_F(NativeFileSystemUsageBubbleViewTest,
132 InvokeUi_SingleWritableFolder) {
133 ShowAndVerifyUi();
134 }
135
IN_PROC_BROWSER_TEST_F(NativeFileSystemUsageBubbleViewTest,InvokeUi_MultipleWritableFolders)136 IN_PROC_BROWSER_TEST_F(NativeFileSystemUsageBubbleViewTest,
137 InvokeUi_MultipleWritableFolders) {
138 ShowAndVerifyUi();
139 }
140
IN_PROC_BROWSER_TEST_F(NativeFileSystemUsageBubbleViewTest,InvokeUi_WritableFilesAndFolders)141 IN_PROC_BROWSER_TEST_F(NativeFileSystemUsageBubbleViewTest,
142 InvokeUi_WritableFilesAndFolders) {
143 ShowAndVerifyUi();
144 }
145
IN_PROC_BROWSER_TEST_F(NativeFileSystemUsageBubbleViewTest,InvokeUi_ReadableFilesAndFolders)146 IN_PROC_BROWSER_TEST_F(NativeFileSystemUsageBubbleViewTest,
147 InvokeUi_ReadableFilesAndFolders) {
148 ShowAndVerifyUi();
149 }
150
IN_PROC_BROWSER_TEST_F(NativeFileSystemUsageBubbleViewTest,InvokeUi_SingleReadableFolder)151 IN_PROC_BROWSER_TEST_F(NativeFileSystemUsageBubbleViewTest,
152 InvokeUi_SingleReadableFolder) {
153 ShowAndVerifyUi();
154 }
155
IN_PROC_BROWSER_TEST_F(NativeFileSystemUsageBubbleViewTest,InvokeUi_MultipleReadableFolders)156 IN_PROC_BROWSER_TEST_F(NativeFileSystemUsageBubbleViewTest,
157 InvokeUi_MultipleReadableFolders) {
158 ShowAndVerifyUi();
159 }
160
IN_PROC_BROWSER_TEST_F(NativeFileSystemUsageBubbleViewTest,InvokeUi_ReadableAndWritableFolders)161 IN_PROC_BROWSER_TEST_F(NativeFileSystemUsageBubbleViewTest,
162 InvokeUi_ReadableAndWritableFolders) {
163 ShowAndVerifyUi();
164 }
165
IN_PROC_BROWSER_TEST_F(NativeFileSystemUsageBubbleViewTest,InvokeUi_LongOrigin)166 IN_PROC_BROWSER_TEST_F(NativeFileSystemUsageBubbleViewTest,
167 InvokeUi_LongOrigin) {
168 ShowAndVerifyUi();
169 }
170