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