Chromium Code Reviews| OLD | NEW |
|---|---|
| 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 Loading... | |
| 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 Loading... | |
| 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 355 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 634 scoped_ptr<content::MediaStreamUI>()); | 634 scoped_ptr<content::MediaStreamUI>()); |
| 635 return; | 635 return; |
| 636 } | 636 } |
| 637 if (!embedder_web_contents()->GetDelegate()) | 637 if (!embedder_web_contents()->GetDelegate()) |
| 638 return; | 638 return; |
| 639 | 639 |
| 640 embedder_web_contents()->GetDelegate()-> | 640 embedder_web_contents()->GetDelegate()-> |
| 641 RequestMediaAccessPermission(embedder_web_contents(), request, callback); | 641 RequestMediaAccessPermission(embedder_web_contents(), request, callback); |
| 642 } | 642 } |
| 643 | 643 |
| 644 void WebViewGuest::OnWebViewDownloadPermissionResponse( | |
| 645 const base::Callback<void(bool)>& callback, | |
| 646 bool allow, | |
| 647 const std::string& user_input) { | |
| 648 callback.Run(allow && attached()); | |
| 649 } | |
| 650 | |
| 644 WebViewGuest::SetPermissionResult WebViewGuest::SetPermission( | 651 WebViewGuest::SetPermissionResult WebViewGuest::SetPermission( |
| 645 int request_id, | 652 int request_id, |
| 646 PermissionResponseAction action, | 653 PermissionResponseAction action, |
| 647 const std::string& user_input) { | 654 const std::string& user_input) { |
| 648 RequestMap::iterator request_itr = | 655 RequestMap::iterator request_itr = |
| 649 pending_permission_requests_.find(request_id); | 656 pending_permission_requests_.find(request_id); |
| 650 | 657 |
| 651 if (request_itr == pending_permission_requests_.end()) | 658 if (request_itr == pending_permission_requests_.end()) |
| 652 return SET_PERMISSION_INVALID; | 659 return SET_PERMISSION_INVALID; |
| 653 | 660 |
| (...skipping 242 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 896 RequestPermission(static_cast<BrowserPluginPermissionType>( | 903 RequestPermission(static_cast<BrowserPluginPermissionType>( |
| 897 WEB_VIEW_PERMISSION_TYPE_MEDIA), | 904 WEB_VIEW_PERMISSION_TYPE_MEDIA), |
| 898 request_info, | 905 request_info, |
| 899 base::Bind(&WebViewGuest::OnWebViewMediaPermissionResponse, | 906 base::Bind(&WebViewGuest::OnWebViewMediaPermissionResponse, |
| 900 base::Unretained(this), | 907 base::Unretained(this), |
| 901 request, | 908 request, |
| 902 callback), | 909 callback), |
| 903 false /* allowed_by_default */); | 910 false /* allowed_by_default */); |
| 904 } | 911 } |
| 905 | 912 |
| 913 void WebViewGuest::CanDownload( | |
| 914 const std::string& request_method, | |
| 915 const GURL& url, | |
| 916 const base::Callback<void(bool)>& callback) { | |
| 917 base::DictionaryValue request_info; | |
| 918 request_info.Set( | |
| 919 guestview::kUrl, | |
| 920 base::Value::CreateStringValue(url.spec())); | |
| 921 RequestPermission( | |
| 922 static_cast<BrowserPluginPermissionType>( | |
| 923 WEB_VIEW_PERMISSION_TYPE_DOWNLOAD), | |
| 924 request_info, | |
| 925 base::Bind(&WebViewGuest::OnWebViewDownloadPermissionResponse, | |
| 926 base::Unretained(this), | |
| 927 callback), | |
| 928 false /* allowed_by_default */); | |
| 929 } | |
| 930 | |
|
lazyboy
2014/04/11 23:25:05
remove empty lines
Fady Samuel
2014/04/14 22:59:09
Done.
| |
| 931 | |
| 932 | |
| 906 #if defined(OS_CHROMEOS) | 933 #if defined(OS_CHROMEOS) |
| 907 void WebViewGuest::OnAccessibilityStatusChanged( | 934 void WebViewGuest::OnAccessibilityStatusChanged( |
| 908 const chromeos::AccessibilityStatusEventDetails& details) { | 935 const chromeos::AccessibilityStatusEventDetails& details) { |
| 909 if (details.notification_type == chromeos::ACCESSIBILITY_MANAGER_SHUTDOWN) { | 936 if (details.notification_type == chromeos::ACCESSIBILITY_MANAGER_SHUTDOWN) { |
| 910 accessibility_subscription_.reset(); | 937 accessibility_subscription_.reset(); |
| 911 } else if (details.notification_type == | 938 } else if (details.notification_type == |
| 912 chromeos::ACCESSIBILITY_TOGGLE_SPOKEN_FEEDBACK) { | 939 chromeos::ACCESSIBILITY_TOGGLE_SPOKEN_FEEDBACK) { |
| 913 if (details.enabled) | 940 if (details.enabled) |
| 914 InjectChromeVoxIfNeeded(guest_web_contents()->GetRenderViewHost()); | 941 InjectChromeVoxIfNeeded(guest_web_contents()->GetRenderViewHost()); |
| 915 else | 942 else |
| (...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 952 const PermissionResponseCallback& callback, | 979 const PermissionResponseCallback& callback, |
| 953 BrowserPluginPermissionType permission_type, | 980 BrowserPluginPermissionType permission_type, |
| 954 bool allowed_by_default) | 981 bool allowed_by_default) |
| 955 : callback(callback), | 982 : callback(callback), |
| 956 permission_type(permission_type), | 983 permission_type(permission_type), |
| 957 allowed_by_default(allowed_by_default) { | 984 allowed_by_default(allowed_by_default) { |
| 958 } | 985 } |
| 959 | 986 |
| 960 WebViewGuest::PermissionResponseInfo::~PermissionResponseInfo() { | 987 WebViewGuest::PermissionResponseInfo::~PermissionResponseInfo() { |
| 961 } | 988 } |
| OLD | NEW |