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

Side by Side Diff: chrome/browser/guestview/webview/webview_guest.cc

Issue 235923003: <webview>: Move download permission to chrome (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@move_media_to_chrome
Patch Set: Merge with ToT Created 6 years, 8 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 2013 The Chromium Authors. All rights reserved. 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 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/guestview/webview/webview_guest.h" 5 #include "chrome/browser/guestview/webview/webview_guest.h"
6 6
7 #include "base/message_loop/message_loop.h" 7 #include "base/message_loop/message_loop.h"
8 #include "base/strings/stringprintf.h" 8 #include "base/strings/stringprintf.h"
9 #include "chrome/browser/chrome_notification_types.h" 9 #include "chrome/browser/chrome_notification_types.h"
10 #include "chrome/browser/extensions/api/web_request/web_request_api.h" 10 #include "chrome/browser/extensions/api/web_request/web_request_api.h"
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after
70 return "crashed"; 70 return "crashed";
71 case base::TERMINATION_STATUS_MAX_ENUM: 71 case base::TERMINATION_STATUS_MAX_ENUM:
72 break; 72 break;
73 } 73 }
74 NOTREACHED() << "Unknown Termination Status."; 74 NOTREACHED() << "Unknown Termination Status.";
75 return "unknown"; 75 return "unknown";
76 } 76 }
77 77
78 static std::string PermissionTypeToString(BrowserPluginPermissionType type) { 78 static std::string PermissionTypeToString(BrowserPluginPermissionType type) {
79 switch (type) { 79 switch (type) {
80 case BROWSER_PLUGIN_PERMISSION_TYPE_DOWNLOAD:
81 return webview::kPermissionTypeDownload;
82 case BROWSER_PLUGIN_PERMISSION_TYPE_NEW_WINDOW: 80 case BROWSER_PLUGIN_PERMISSION_TYPE_NEW_WINDOW:
83 return webview::kPermissionTypeNewWindow; 81 return webview::kPermissionTypeNewWindow;
84 case BROWSER_PLUGIN_PERMISSION_TYPE_POINTER_LOCK: 82 case BROWSER_PLUGIN_PERMISSION_TYPE_POINTER_LOCK:
85 return webview::kPermissionTypePointerLock; 83 return webview::kPermissionTypePointerLock;
86 case BROWSER_PLUGIN_PERMISSION_TYPE_JAVASCRIPT_DIALOG: 84 case BROWSER_PLUGIN_PERMISSION_TYPE_JAVASCRIPT_DIALOG:
87 return webview::kPermissionTypeDialog; 85 return webview::kPermissionTypeDialog;
88 case BROWSER_PLUGIN_PERMISSION_TYPE_UNKNOWN: 86 case BROWSER_PLUGIN_PERMISSION_TYPE_UNKNOWN:
89 NOTREACHED(); 87 NOTREACHED();
90 break; 88 break;
91 default: { 89 default: {
92 WebViewPermissionType webview = static_cast<WebViewPermissionType>(type); 90 WebViewPermissionType webview = static_cast<WebViewPermissionType>(type);
93 switch (webview) { 91 switch (webview) {
92 case WEB_VIEW_PERMISSION_TYPE_DOWNLOAD:
93 return webview::kPermissionTypeDownload;
94 case WEB_VIEW_PERMISSION_TYPE_GEOLOCATION: 94 case WEB_VIEW_PERMISSION_TYPE_GEOLOCATION:
95 return webview::kPermissionTypeGeolocation; 95 return webview::kPermissionTypeGeolocation;
96 case WEB_VIEW_PERMISSION_TYPE_LOAD_PLUGIN: 96 case WEB_VIEW_PERMISSION_TYPE_LOAD_PLUGIN:
97 return webview::kPermissionTypeLoadPlugin; 97 return webview::kPermissionTypeLoadPlugin;
98 case WEB_VIEW_PERMISSION_TYPE_MEDIA: 98 case WEB_VIEW_PERMISSION_TYPE_MEDIA:
99 return webview::kPermissionTypeMedia; 99 return webview::kPermissionTypeMedia;
100 } 100 }
101 NOTREACHED(); 101 NOTREACHED();
102 } 102 }
103 } 103 }
(...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after
186 186
187 // static 187 // static
188 void WebViewGuest::RecordUserInitiatedUMA(const PermissionResponseInfo& info, 188 void WebViewGuest::RecordUserInitiatedUMA(const PermissionResponseInfo& info,
189 bool allow) { 189 bool allow) {
190 if (allow) { 190 if (allow) {
191 // Note that |allow| == true means the embedder explicitly allowed the 191 // Note that |allow| == true means the embedder explicitly allowed the
192 // request. For some requests they might still fail. An example of such 192 // request. For some requests they might still fail. An example of such
193 // scenario would be: an embedder allows geolocation request but doesn't 193 // scenario would be: an embedder allows geolocation request but doesn't
194 // have geolocation access on its own. 194 // have geolocation access on its own.
195 switch (info.permission_type) { 195 switch (info.permission_type) {
196 case BROWSER_PLUGIN_PERMISSION_TYPE_DOWNLOAD:
197 content::RecordAction(
198 UserMetricsAction("BrowserPlugin.PermissionAllow.Download"));
199 break;
200 case BROWSER_PLUGIN_PERMISSION_TYPE_POINTER_LOCK: 196 case BROWSER_PLUGIN_PERMISSION_TYPE_POINTER_LOCK:
201 content::RecordAction( 197 content::RecordAction(
202 UserMetricsAction("BrowserPlugin.PermissionAllow.PointerLock")); 198 UserMetricsAction("BrowserPlugin.PermissionAllow.PointerLock"));
203 break; 199 break;
204 case BROWSER_PLUGIN_PERMISSION_TYPE_NEW_WINDOW: 200 case BROWSER_PLUGIN_PERMISSION_TYPE_NEW_WINDOW:
205 content::RecordAction( 201 content::RecordAction(
206 UserMetricsAction("BrowserPlugin.PermissionAllow.NewWindow")); 202 UserMetricsAction("BrowserPlugin.PermissionAllow.NewWindow"));
207 break; 203 break;
208 case BROWSER_PLUGIN_PERMISSION_TYPE_JAVASCRIPT_DIALOG: 204 case BROWSER_PLUGIN_PERMISSION_TYPE_JAVASCRIPT_DIALOG:
209 content::RecordAction( 205 content::RecordAction(
210 UserMetricsAction("BrowserPlugin.PermissionAllow.JSDialog")); 206 UserMetricsAction("BrowserPlugin.PermissionAllow.JSDialog"));
211 break; 207 break;
212 case BROWSER_PLUGIN_PERMISSION_TYPE_UNKNOWN: 208 case BROWSER_PLUGIN_PERMISSION_TYPE_UNKNOWN:
213 break; 209 break;
214 default: { 210 default: {
215 WebViewPermissionType webview_permission_type = 211 WebViewPermissionType webview_permission_type =
216 static_cast<WebViewPermissionType>(info.permission_type); 212 static_cast<WebViewPermissionType>(info.permission_type);
217 switch (webview_permission_type) { 213 switch (webview_permission_type) {
218 case WEB_VIEW_PERMISSION_TYPE_GEOLOCATION: 214 case WEB_VIEW_PERMISSION_TYPE_GEOLOCATION:
219 content::RecordAction( 215 content::RecordAction(
220 UserMetricsAction("WebView.PermissionAllow.Geolocation")); 216 UserMetricsAction("WebView.PermissionAllow.Geolocation"));
221 break; 217 break;
222 case WEB_VIEW_PERMISSION_TYPE_LOAD_PLUGIN: 218 case WEB_VIEW_PERMISSION_TYPE_LOAD_PLUGIN:
223 content::RecordAction( 219 content::RecordAction(
224 UserMetricsAction("WebView.Guest.PermissionAllow.PluginLoad")); 220 UserMetricsAction("WebView.Guest.PermissionAllow.PluginLoad"));
225 case WEB_VIEW_PERMISSION_TYPE_MEDIA: 221 case WEB_VIEW_PERMISSION_TYPE_MEDIA:
226 content::RecordAction( 222 content::RecordAction(
227 UserMetricsAction("WebView.PermissionAllow.Media")); 223 UserMetricsAction("WebView.PermissionAllow.Media"));
228 break; 224 break;
225 case WEB_VIEW_PERMISSION_TYPE_DOWNLOAD:
226 content::RecordAction(
227 UserMetricsAction("WebView.PermissionAllow.Download"));
228 break;
229 default: 229 default:
230 break; 230 break;
231 } 231 }
232 } 232 }
233 } 233 }
234 } else { 234 } else {
235 switch (info.permission_type) { 235 switch (info.permission_type) {
236 case BROWSER_PLUGIN_PERMISSION_TYPE_DOWNLOAD:
237 content::RecordAction(
238 UserMetricsAction("BrowserPlugin.PermissionDeny.Download"));
239 break;
240 case BROWSER_PLUGIN_PERMISSION_TYPE_POINTER_LOCK: 236 case BROWSER_PLUGIN_PERMISSION_TYPE_POINTER_LOCK:
241 content::RecordAction( 237 content::RecordAction(
242 UserMetricsAction("BrowserPlugin.PermissionDeny.PointerLock")); 238 UserMetricsAction("BrowserPlugin.PermissionDeny.PointerLock"));
243 break; 239 break;
244 case BROWSER_PLUGIN_PERMISSION_TYPE_NEW_WINDOW: 240 case BROWSER_PLUGIN_PERMISSION_TYPE_NEW_WINDOW:
245 content::RecordAction( 241 content::RecordAction(
246 UserMetricsAction("BrowserPlugin.PermissionDeny.NewWindow")); 242 UserMetricsAction("BrowserPlugin.PermissionDeny.NewWindow"));
247 break; 243 break;
248 case BROWSER_PLUGIN_PERMISSION_TYPE_JAVASCRIPT_DIALOG: 244 case BROWSER_PLUGIN_PERMISSION_TYPE_JAVASCRIPT_DIALOG:
249 content::RecordAction( 245 content::RecordAction(
250 UserMetricsAction("BrowserPlugin.PermissionDeny.JSDialog")); 246 UserMetricsAction("BrowserPlugin.PermissionDeny.JSDialog"));
251 break; 247 break;
252 case BROWSER_PLUGIN_PERMISSION_TYPE_UNKNOWN: 248 case BROWSER_PLUGIN_PERMISSION_TYPE_UNKNOWN:
253 break; 249 break;
254 default: { 250 default: {
255 WebViewPermissionType webview_permission_type = 251 WebViewPermissionType webview_permission_type =
256 static_cast<WebViewPermissionType>(info.permission_type); 252 static_cast<WebViewPermissionType>(info.permission_type);
257 switch (webview_permission_type) { 253 switch (webview_permission_type) {
258 case WEB_VIEW_PERMISSION_TYPE_GEOLOCATION: 254 case WEB_VIEW_PERMISSION_TYPE_GEOLOCATION:
259 content::RecordAction( 255 content::RecordAction(
260 UserMetricsAction("WebView.PermissionDeny.Geolocation")); 256 UserMetricsAction("WebView.PermissionDeny.Geolocation"));
261 break; 257 break;
262 case WEB_VIEW_PERMISSION_TYPE_LOAD_PLUGIN: 258 case WEB_VIEW_PERMISSION_TYPE_LOAD_PLUGIN:
263 content::RecordAction( 259 content::RecordAction(
264 UserMetricsAction("WebView.Guest.PermissionDeny.PluginLoad")); 260 UserMetricsAction("WebView.Guest.PermissionDeny.PluginLoad"));
265 case WEB_VIEW_PERMISSION_TYPE_MEDIA: 261 case WEB_VIEW_PERMISSION_TYPE_MEDIA:
266 content::RecordAction( 262 content::RecordAction(
267 UserMetricsAction("WebView.PermissionDeny.Media")); 263 UserMetricsAction("WebView.PermissionDeny.Media"));
268 break; 264 break;
265 case WEB_VIEW_PERMISSION_TYPE_DOWNLOAD:
266 content::RecordAction(
267 UserMetricsAction("WebView.PermissionDeny.Download"));
268 break;
269 default: 269 default:
270 break; 270 break;
271 } 271 }
272 } 272 }
273 } 273 }
274 } 274 }
275 } 275 }
276 276
277 void WebViewGuest::Attach(WebContents* embedder_web_contents, 277 void WebViewGuest::Attach(WebContents* embedder_web_contents,
278 const base::DictionaryValue& args) { 278 const base::DictionaryValue& args) {
(...skipping 323 matching lines...) Expand 10 before | Expand all | Expand 10 after
602 scoped_ptr<content::MediaStreamUI>()); 602 scoped_ptr<content::MediaStreamUI>());
603 return; 603 return;
604 } 604 }
605 if (!embedder_web_contents()->GetDelegate()) 605 if (!embedder_web_contents()->GetDelegate())
606 return; 606 return;
607 607
608 embedder_web_contents()->GetDelegate()-> 608 embedder_web_contents()->GetDelegate()->
609 RequestMediaAccessPermission(embedder_web_contents(), request, callback); 609 RequestMediaAccessPermission(embedder_web_contents(), request, callback);
610 } 610 }
611 611
612 void WebViewGuest::OnWebViewDownloadPermissionResponse(
613 const base::Callback<void(bool)>& callback,
614 bool allow,
615 const std::string& user_input) {
616 callback.Run(allow && attached());
617 }
618
612 WebViewGuest::SetPermissionResult WebViewGuest::SetPermission( 619 WebViewGuest::SetPermissionResult WebViewGuest::SetPermission(
613 int request_id, 620 int request_id,
614 PermissionResponseAction action, 621 PermissionResponseAction action,
615 const std::string& user_input) { 622 const std::string& user_input) {
616 RequestMap::iterator request_itr = 623 RequestMap::iterator request_itr =
617 pending_permission_requests_.find(request_id); 624 pending_permission_requests_.find(request_id);
618 625
619 if (request_itr == pending_permission_requests_.end()) 626 if (request_itr == pending_permission_requests_.end())
620 return SET_PERMISSION_INVALID; 627 return SET_PERMISSION_INVALID;
621 628
(...skipping 242 matching lines...) Expand 10 before | Expand all | Expand 10 after
864 RequestPermission(static_cast<BrowserPluginPermissionType>( 871 RequestPermission(static_cast<BrowserPluginPermissionType>(
865 WEB_VIEW_PERMISSION_TYPE_MEDIA), 872 WEB_VIEW_PERMISSION_TYPE_MEDIA),
866 request_info, 873 request_info,
867 base::Bind(&WebViewGuest::OnWebViewMediaPermissionResponse, 874 base::Bind(&WebViewGuest::OnWebViewMediaPermissionResponse,
868 base::Unretained(this), 875 base::Unretained(this),
869 request, 876 request,
870 callback), 877 callback),
871 false /* allowed_by_default */); 878 false /* allowed_by_default */);
872 } 879 }
873 880
881 void WebViewGuest::CanDownload(
882 const std::string& request_method,
883 const GURL& url,
884 const base::Callback<void(bool)>& callback) {
885 base::DictionaryValue request_info;
886 request_info.Set(
887 guestview::kUrl,
888 base::Value::CreateStringValue(url.spec()));
889 RequestPermission(
890 static_cast<BrowserPluginPermissionType>(
891 WEB_VIEW_PERMISSION_TYPE_DOWNLOAD),
892 request_info,
893 base::Bind(&WebViewGuest::OnWebViewDownloadPermissionResponse,
894 base::Unretained(this),
895 callback),
896 false /* allowed_by_default */);
897 }
898
874 #if defined(OS_CHROMEOS) 899 #if defined(OS_CHROMEOS)
875 void WebViewGuest::OnAccessibilityStatusChanged( 900 void WebViewGuest::OnAccessibilityStatusChanged(
876 const chromeos::AccessibilityStatusEventDetails& details) { 901 const chromeos::AccessibilityStatusEventDetails& details) {
877 if (details.notification_type == chromeos::ACCESSIBILITY_MANAGER_SHUTDOWN) { 902 if (details.notification_type == chromeos::ACCESSIBILITY_MANAGER_SHUTDOWN) {
878 accessibility_subscription_.reset(); 903 accessibility_subscription_.reset();
879 } else if (details.notification_type == 904 } else if (details.notification_type ==
880 chromeos::ACCESSIBILITY_TOGGLE_SPOKEN_FEEDBACK) { 905 chromeos::ACCESSIBILITY_TOGGLE_SPOKEN_FEEDBACK) {
881 if (details.enabled) 906 if (details.enabled)
882 InjectChromeVoxIfNeeded(guest_web_contents()->GetRenderViewHost()); 907 InjectChromeVoxIfNeeded(guest_web_contents()->GetRenderViewHost());
883 else 908 else
(...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after
968 const PermissionResponseCallback& callback, 993 const PermissionResponseCallback& callback,
969 BrowserPluginPermissionType permission_type, 994 BrowserPluginPermissionType permission_type,
970 bool allowed_by_default) 995 bool allowed_by_default)
971 : callback(callback), 996 : callback(callback),
972 permission_type(permission_type), 997 permission_type(permission_type),
973 allowed_by_default(allowed_by_default) { 998 allowed_by_default(allowed_by_default) {
974 } 999 }
975 1000
976 WebViewGuest::PermissionResponseInfo::~PermissionResponseInfo() { 1001 WebViewGuest::PermissionResponseInfo::~PermissionResponseInfo() {
977 } 1002 }
OLDNEW
« no previous file with comments | « chrome/browser/guestview/webview/webview_guest.h ('k') | chrome/browser/guestview/webview/webview_permission_types.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698