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

Side by Side Diff: chrome/browser/extensions/api/file_system/consent_provider.cc

Issue 2934143002: Move chrome.fileSystem implementation to //extensions (Closed)
Patch Set: devlin Created 3 years, 6 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 2017 The Chromium Authors. All rights reserved. 1 // Copyright 2017 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 "chrome/browser/extensions/api/file_system/consent_provider.h" 5 #include "chrome/browser/extensions/api/file_system/consent_provider.h"
6 6
7 #include <memory> 7 #include <memory>
8 #include <string> 8 #include <string>
9 9
10 #include "base/bind.h" 10 #include "base/bind.h"
11 #include "base/logging.h" 11 #include "base/logging.h"
12 #include "base/memory/ptr_util.h" 12 #include "base/memory/ptr_util.h"
13 #include "base/threading/thread_task_runner_handle.h" 13 #include "base/threading/thread_task_runner_handle.h"
14 #include "chrome/browser/chromeos/app_mode/kiosk_app_manager.h" 14 #include "chrome/browser/chromeos/app_mode/kiosk_app_manager.h"
15 #include "chrome/browser/chromeos/file_manager/app_id.h" 15 #include "chrome/browser/chromeos/file_manager/app_id.h"
16 #include "chrome/browser/chromeos/file_manager/volume_manager.h" 16 #include "chrome/browser/chromeos/file_manager/volume_manager.h"
17 #include "chrome/browser/extensions/api/file_system/request_file_system_notifica tion.h" 17 #include "chrome/browser/extensions/api/file_system/request_file_system_notifica tion.h"
18 #include "chrome/browser/profiles/profile.h" 18 #include "chrome/browser/profiles/profile.h"
19 #include "chrome/browser/ui/views/extensions/request_file_system_dialog_view.h" 19 #include "chrome/browser/ui/views/extensions/request_file_system_dialog_view.h"
20 #include "chrome/common/extensions/api/file_system.h"
21 #include "components/user_manager/user_manager.h" 20 #include "components/user_manager/user_manager.h"
22 #include "content/public/browser/render_frame_host.h" 21 #include "content/public/browser/render_frame_host.h"
23 #include "content/public/browser/web_contents.h" 22 #include "content/public/browser/web_contents.h"
24 #include "extensions/browser/app_window/app_window.h" 23 #include "extensions/browser/app_window/app_window.h"
25 #include "extensions/browser/app_window/app_window_registry.h" 24 #include "extensions/browser/app_window/app_window_registry.h"
25 #include "extensions/common/api/file_system.h"
26 #include "extensions/common/manifest_handlers/kiosk_mode_info.h" 26 #include "extensions/common/manifest_handlers/kiosk_mode_info.h"
27 27
28 namespace extensions { 28 namespace extensions {
29 29
30 namespace { 30 namespace {
31 31
32 // List of whitelisted component apps and extensions by their ids for 32 // List of whitelisted component apps and extensions by their ids for
33 // chrome.fileSystem.requestFileSystem. 33 // chrome.fileSystem.requestFileSystem.
34 const char* const kRequestFileSystemComponentWhitelist[] = { 34 const char* const kRequestFileSystemComponentWhitelist[] = {
35 file_manager::kFileManagerAppId, 35 file_manager::kFileManagerAppId,
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
78 ConsentProvider::ConsentProvider(DelegateInterface* delegate) 78 ConsentProvider::ConsentProvider(DelegateInterface* delegate)
79 : delegate_(delegate) { 79 : delegate_(delegate) {
80 DCHECK(delegate_); 80 DCHECK(delegate_);
81 } 81 }
82 82
83 ConsentProvider::~ConsentProvider() { 83 ConsentProvider::~ConsentProvider() {
84 } 84 }
85 85
86 void ConsentProvider::RequestConsent( 86 void ConsentProvider::RequestConsent(
87 const Extension& extension, 87 const Extension& extension,
88 content::RenderFrameHost* host,
88 const base::WeakPtr<file_manager::Volume>& volume, 89 const base::WeakPtr<file_manager::Volume>& volume,
89 bool writable, 90 bool writable,
90 const ConsentCallback& callback) { 91 const ConsentCallback& callback) {
91 DCHECK(IsGrantable(extension)); 92 DCHECK(IsGrantable(extension));
92 93
93 // If a whitelisted component, then no need to ask or inform the user. 94 // If a whitelisted component, then no need to ask or inform the user.
94 if (extension.location() == Manifest::COMPONENT && 95 if (extension.location() == Manifest::COMPONENT &&
95 delegate_->IsWhitelistedComponent(extension)) { 96 delegate_->IsWhitelistedComponent(extension)) {
96 base::ThreadTaskRunnerHandle::Get()->PostTask( 97 base::ThreadTaskRunnerHandle::Get()->PostTask(
97 FROM_HERE, base::Bind(callback, CONSENT_GRANTED)); 98 FROM_HERE, base::Bind(callback, CONSENT_GRANTED));
98 return; 99 return;
99 } 100 }
100 101
101 // If auto-launched kiosk app, then no need to ask user either, but show the 102 // If auto-launched kiosk app, then no need to ask user either, but show the
102 // notification. 103 // notification.
103 if (delegate_->IsAutoLaunched(extension)) { 104 if (delegate_->IsAutoLaunched(extension)) {
104 delegate_->ShowNotification(extension, volume, writable); 105 delegate_->ShowNotification(extension, volume, writable);
105 base::ThreadTaskRunnerHandle::Get()->PostTask( 106 base::ThreadTaskRunnerHandle::Get()->PostTask(
106 FROM_HERE, base::Bind(callback, CONSENT_GRANTED)); 107 FROM_HERE, base::Bind(callback, CONSENT_GRANTED));
107 return; 108 return;
108 } 109 }
109 110
110 // If it's a kiosk app running in manual-launch kiosk session, then show 111 // If it's a kiosk app running in manual-launch kiosk session, then show
111 // the confirmation dialog. 112 // the confirmation dialog.
112 if (KioskModeInfo::IsKioskOnly(&extension) && 113 if (KioskModeInfo::IsKioskOnly(&extension) &&
113 user_manager::UserManager::Get()->IsLoggedInAsKioskApp()) { 114 user_manager::UserManager::Get()->IsLoggedInAsKioskApp()) {
114 delegate_->ShowDialog(extension, volume, writable, 115 delegate_->ShowDialog(extension, host, volume, writable,
115 base::Bind(&DialogResultToConsent, callback)); 116 base::Bind(&DialogResultToConsent, callback));
116 return; 117 return;
117 } 118 }
118 119
119 NOTREACHED() << "Cannot request consent for non-grantable extensions."; 120 NOTREACHED() << "Cannot request consent for non-grantable extensions.";
120 } 121 }
121 122
122 bool ConsentProvider::IsGrantable(const Extension& extension) { 123 bool ConsentProvider::IsGrantable(const Extension& extension) {
123 const bool is_whitelisted_component = 124 const bool is_whitelisted_component =
124 delegate_->IsWhitelistedComponent(extension); 125 delegate_->IsWhitelistedComponent(extension);
125 126
126 const bool is_running_in_kiosk_session = 127 const bool is_running_in_kiosk_session =
127 KioskModeInfo::IsKioskOnly(&extension) && 128 KioskModeInfo::IsKioskOnly(&extension) &&
128 user_manager::UserManager::Get()->IsLoggedInAsKioskApp(); 129 user_manager::UserManager::Get()->IsLoggedInAsKioskApp();
129 130
130 return is_whitelisted_component || is_running_in_kiosk_session; 131 return is_whitelisted_component || is_running_in_kiosk_session;
131 } 132 }
132 133
133 ConsentProviderDelegate::ConsentProviderDelegate(Profile* profile, 134 ConsentProviderDelegate::ConsentProviderDelegate(Profile* profile)
134 content::RenderFrameHost* host) 135 : profile_(profile) {
135 : profile_(profile), host_(host) {
136 DCHECK(profile_); 136 DCHECK(profile_);
137 } 137 }
138 138
139 ConsentProviderDelegate::~ConsentProviderDelegate() { 139 ConsentProviderDelegate::~ConsentProviderDelegate() {
140 } 140 }
141 141
142 // static 142 // static
143 void ConsentProviderDelegate::SetAutoDialogButtonForTest( 143 void ConsentProviderDelegate::SetAutoDialogButtonForTest(
144 ui::DialogButton button) { 144 ui::DialogButton button) {
145 g_auto_dialog_button_for_test = button; 145 g_auto_dialog_button_for_test = button;
146 } 146 }
147 147
148 void ConsentProviderDelegate::ShowDialog( 148 void ConsentProviderDelegate::ShowDialog(
149 const Extension& extension, 149 const Extension& extension,
150 content::RenderFrameHost* host,
150 const base::WeakPtr<file_manager::Volume>& volume, 151 const base::WeakPtr<file_manager::Volume>& volume,
151 bool writable, 152 bool writable,
152 const file_system_api::ConsentProvider::ShowDialogCallback& callback) { 153 const file_system_api::ConsentProvider::ShowDialogCallback& callback) {
153 DCHECK(host_); 154 DCHECK(host);
154 content::WebContents* web_contents = nullptr; 155 content::WebContents* web_contents = nullptr;
155 156
156 // Find an app window to host the dialog. 157 // Find an app window to host the dialog.
157 content::WebContents* const foreground_contents = 158 content::WebContents* const foreground_contents =
158 content::WebContents::FromRenderFrameHost(host_); 159 content::WebContents::FromRenderFrameHost(host);
159 if (AppWindowRegistry::Get(profile_)->GetAppWindowForWebContents( 160 if (AppWindowRegistry::Get(profile_)->GetAppWindowForWebContents(
160 foreground_contents)) { 161 foreground_contents)) {
161 web_contents = foreground_contents; 162 web_contents = foreground_contents;
162 } 163 }
163 164
164 // If there is no web contents handle, then the method is most probably 165 // If there is no web contents handle, then the method is most probably
165 // executed from a background page. 166 // executed from a background page.
166 if (!web_contents) 167 if (!web_contents)
167 web_contents = GetWebContentsForAppId(profile_, extension.id()); 168 web_contents = GetWebContentsForAppId(profile_, extension.id());
168 169
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
213 const Extension& extension) { 214 const Extension& extension) {
214 for (auto* whitelisted_id : kRequestFileSystemComponentWhitelist) { 215 for (auto* whitelisted_id : kRequestFileSystemComponentWhitelist) {
215 if (extension.id().compare(whitelisted_id) == 0) 216 if (extension.id().compare(whitelisted_id) == 0)
216 return true; 217 return true;
217 } 218 }
218 return false; 219 return false;
219 } 220 }
220 221
221 } // namespace file_system_api 222 } // namespace file_system_api
222 } // namespace extensions 223 } // namespace extensions
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698