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

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

Issue 239143007: <webview>: Move JavaScript Dialog API to chrome (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@move_pointer_lock_to_chrome
Patch Set: Addressed nits 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 61 matching lines...) Expand 10 before | Expand all | Expand 10 after
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_NEW_WINDOW: 80 case BROWSER_PLUGIN_PERMISSION_TYPE_NEW_WINDOW:
81 return webview::kPermissionTypeNewWindow; 81 return webview::kPermissionTypeNewWindow;
82 case BROWSER_PLUGIN_PERMISSION_TYPE_JAVASCRIPT_DIALOG:
83 return webview::kPermissionTypeDialog;
84 case BROWSER_PLUGIN_PERMISSION_TYPE_UNKNOWN: 82 case BROWSER_PLUGIN_PERMISSION_TYPE_UNKNOWN:
85 NOTREACHED(); 83 NOTREACHED();
86 break; 84 break;
87 default: { 85 default: {
88 WebViewPermissionType webview = static_cast<WebViewPermissionType>(type); 86 WebViewPermissionType webview = static_cast<WebViewPermissionType>(type);
89 switch (webview) { 87 switch (webview) {
90 case WEB_VIEW_PERMISSION_TYPE_DOWNLOAD: 88 case WEB_VIEW_PERMISSION_TYPE_DOWNLOAD:
91 return webview::kPermissionTypeDownload; 89 return webview::kPermissionTypeDownload;
92 case WEB_VIEW_PERMISSION_TYPE_GEOLOCATION: 90 case WEB_VIEW_PERMISSION_TYPE_GEOLOCATION:
93 return webview::kPermissionTypeGeolocation; 91 return webview::kPermissionTypeGeolocation;
92 case WEB_VIEW_PERMISSION_TYPE_JAVASCRIPT_DIALOG:
93 return webview::kPermissionTypeDialog;
94 case WEB_VIEW_PERMISSION_TYPE_LOAD_PLUGIN: 94 case WEB_VIEW_PERMISSION_TYPE_LOAD_PLUGIN:
95 return webview::kPermissionTypeLoadPlugin; 95 return webview::kPermissionTypeLoadPlugin;
96 case WEB_VIEW_PERMISSION_TYPE_MEDIA: 96 case WEB_VIEW_PERMISSION_TYPE_MEDIA:
97 return webview::kPermissionTypeMedia; 97 return webview::kPermissionTypeMedia;
98 case WEB_VIEW_PERMISSION_TYPE_POINTER_LOCK: 98 case WEB_VIEW_PERMISSION_TYPE_POINTER_LOCK:
99 return webview::kPermissionTypePointerLock; 99 return webview::kPermissionTypePointerLock;
100 } 100 }
101 NOTREACHED(); 101 NOTREACHED();
102 } 102 }
103 } 103 }
(...skipping 28 matching lines...) Expand all
132 const std::string& extension_id) 132 const std::string& extension_id)
133 : GuestView(guest_web_contents, extension_id), 133 : GuestView(guest_web_contents, extension_id),
134 WebContentsObserver(guest_web_contents), 134 WebContentsObserver(guest_web_contents),
135 script_executor_(new extensions::ScriptExecutor(guest_web_contents, 135 script_executor_(new extensions::ScriptExecutor(guest_web_contents,
136 &script_observers_)), 136 &script_observers_)),
137 next_permission_request_id_(0), 137 next_permission_request_id_(0),
138 is_overriding_user_agent_(false), 138 is_overriding_user_agent_(false),
139 pending_reload_on_attachment_(false), 139 pending_reload_on_attachment_(false),
140 main_frame_id_(0), 140 main_frame_id_(0),
141 chromevox_injected_(false), 141 chromevox_injected_(false),
142 find_helper_(this) { 142 find_helper_(this),
143 javascript_dialog_helper_(this) {
143 notification_registrar_.Add( 144 notification_registrar_.Add(
144 this, content::NOTIFICATION_LOAD_COMPLETED_MAIN_FRAME, 145 this, content::NOTIFICATION_LOAD_COMPLETED_MAIN_FRAME,
145 content::Source<WebContents>(guest_web_contents)); 146 content::Source<WebContents>(guest_web_contents));
146 147
147 notification_registrar_.Add( 148 notification_registrar_.Add(
148 this, content::NOTIFICATION_RESOURCE_RECEIVED_REDIRECT, 149 this, content::NOTIFICATION_RESOURCE_RECEIVED_REDIRECT,
149 content::Source<WebContents>(guest_web_contents)); 150 content::Source<WebContents>(guest_web_contents));
150 151
151 #if defined(OS_CHROMEOS) 152 #if defined(OS_CHROMEOS)
152 chromeos::AccessibilityManager* accessibility_manager = 153 chromeos::AccessibilityManager* accessibility_manager =
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
190 if (allow) { 191 if (allow) {
191 // Note that |allow| == true means the embedder explicitly allowed the 192 // Note that |allow| == true means the embedder explicitly allowed the
192 // request. For some requests they might still fail. An example of such 193 // request. For some requests they might still fail. An example of such
193 // scenario would be: an embedder allows geolocation request but doesn't 194 // scenario would be: an embedder allows geolocation request but doesn't
194 // have geolocation access on its own. 195 // have geolocation access on its own.
195 switch (info.permission_type) { 196 switch (info.permission_type) {
196 case BROWSER_PLUGIN_PERMISSION_TYPE_NEW_WINDOW: 197 case BROWSER_PLUGIN_PERMISSION_TYPE_NEW_WINDOW:
197 content::RecordAction( 198 content::RecordAction(
198 UserMetricsAction("BrowserPlugin.PermissionAllow.NewWindow")); 199 UserMetricsAction("BrowserPlugin.PermissionAllow.NewWindow"));
199 break; 200 break;
200 case BROWSER_PLUGIN_PERMISSION_TYPE_JAVASCRIPT_DIALOG:
201 content::RecordAction(
202 UserMetricsAction("BrowserPlugin.PermissionAllow.JSDialog"));
203 break;
204 case BROWSER_PLUGIN_PERMISSION_TYPE_UNKNOWN: 201 case BROWSER_PLUGIN_PERMISSION_TYPE_UNKNOWN:
205 break; 202 break;
206 default: { 203 default: {
207 WebViewPermissionType webview_permission_type = 204 WebViewPermissionType webview_permission_type =
208 static_cast<WebViewPermissionType>(info.permission_type); 205 static_cast<WebViewPermissionType>(info.permission_type);
209 switch (webview_permission_type) { 206 switch (webview_permission_type) {
210 case WEB_VIEW_PERMISSION_TYPE_DOWNLOAD: 207 case WEB_VIEW_PERMISSION_TYPE_DOWNLOAD:
211 content::RecordAction( 208 content::RecordAction(
212 UserMetricsAction("WebView.PermissionAllow.Download")); 209 UserMetricsAction("WebView.PermissionAllow.Download"));
213 break; 210 break;
214 case WEB_VIEW_PERMISSION_TYPE_GEOLOCATION: 211 case WEB_VIEW_PERMISSION_TYPE_GEOLOCATION:
215 content::RecordAction( 212 content::RecordAction(
216 UserMetricsAction("WebView.PermissionAllow.Geolocation")); 213 UserMetricsAction("WebView.PermissionAllow.Geolocation"));
217 break; 214 break;
215 case WEB_VIEW_PERMISSION_TYPE_JAVASCRIPT_DIALOG:
216 content::RecordAction(
217 UserMetricsAction("WebView.PermissionAllow.JSDialog"));
218 break;
218 case WEB_VIEW_PERMISSION_TYPE_LOAD_PLUGIN: 219 case WEB_VIEW_PERMISSION_TYPE_LOAD_PLUGIN:
219 content::RecordAction( 220 content::RecordAction(
220 UserMetricsAction("WebView.Guest.PermissionAllow.PluginLoad")); 221 UserMetricsAction("WebView.Guest.PermissionAllow.PluginLoad"));
221 case WEB_VIEW_PERMISSION_TYPE_MEDIA: 222 case WEB_VIEW_PERMISSION_TYPE_MEDIA:
222 content::RecordAction( 223 content::RecordAction(
223 UserMetricsAction("WebView.PermissionAllow.Media")); 224 UserMetricsAction("WebView.PermissionAllow.Media"));
224 break; 225 break;
225 case WEB_VIEW_PERMISSION_TYPE_POINTER_LOCK: 226 case WEB_VIEW_PERMISSION_TYPE_POINTER_LOCK:
226 content::RecordAction( 227 content::RecordAction(
227 UserMetricsAction("WebView.PermissionAllow.PointerLock")); 228 UserMetricsAction("WebView.PermissionAllow.PointerLock"));
228 break; 229 break;
229 default: 230 default:
230 break; 231 break;
231 } 232 }
232 } 233 }
233 } 234 }
234 } else { 235 } else {
235 switch (info.permission_type) { 236 switch (info.permission_type) {
236 case BROWSER_PLUGIN_PERMISSION_TYPE_NEW_WINDOW: 237 case BROWSER_PLUGIN_PERMISSION_TYPE_NEW_WINDOW:
237 content::RecordAction( 238 content::RecordAction(
238 UserMetricsAction("BrowserPlugin.PermissionDeny.NewWindow")); 239 UserMetricsAction("BrowserPlugin.PermissionDeny.NewWindow"));
239 break; 240 break;
240 case BROWSER_PLUGIN_PERMISSION_TYPE_JAVASCRIPT_DIALOG:
241 content::RecordAction(
242 UserMetricsAction("BrowserPlugin.PermissionDeny.JSDialog"));
243 break;
244 case BROWSER_PLUGIN_PERMISSION_TYPE_UNKNOWN: 241 case BROWSER_PLUGIN_PERMISSION_TYPE_UNKNOWN:
245 break; 242 break;
246 default: { 243 default: {
247 WebViewPermissionType webview_permission_type = 244 WebViewPermissionType webview_permission_type =
248 static_cast<WebViewPermissionType>(info.permission_type); 245 static_cast<WebViewPermissionType>(info.permission_type);
249 switch (webview_permission_type) { 246 switch (webview_permission_type) {
250 case WEB_VIEW_PERMISSION_TYPE_DOWNLOAD: 247 case WEB_VIEW_PERMISSION_TYPE_DOWNLOAD:
251 content::RecordAction( 248 content::RecordAction(
252 UserMetricsAction("WebView.PermissionDeny.Download")); 249 UserMetricsAction("WebView.PermissionDeny.Download"));
253 break; 250 break;
254 case WEB_VIEW_PERMISSION_TYPE_GEOLOCATION: 251 case WEB_VIEW_PERMISSION_TYPE_GEOLOCATION:
255 content::RecordAction( 252 content::RecordAction(
256 UserMetricsAction("WebView.PermissionDeny.Geolocation")); 253 UserMetricsAction("WebView.PermissionDeny.Geolocation"));
257 break; 254 break;
255 case WEB_VIEW_PERMISSION_TYPE_JAVASCRIPT_DIALOG:
256 content::RecordAction(
257 UserMetricsAction("WebView.PermissionDeny.JSDialog"));
258 break;
258 case WEB_VIEW_PERMISSION_TYPE_LOAD_PLUGIN: 259 case WEB_VIEW_PERMISSION_TYPE_LOAD_PLUGIN:
259 content::RecordAction( 260 content::RecordAction(
260 UserMetricsAction("WebView.Guest.PermissionDeny.PluginLoad")); 261 UserMetricsAction("WebView.Guest.PermissionDeny.PluginLoad"));
261 case WEB_VIEW_PERMISSION_TYPE_MEDIA: 262 case WEB_VIEW_PERMISSION_TYPE_MEDIA:
262 content::RecordAction( 263 content::RecordAction(
263 UserMetricsAction("WebView.PermissionDeny.Media")); 264 UserMetricsAction("WebView.PermissionDeny.Media"));
264 break; 265 break;
265 case WEB_VIEW_PERMISSION_TYPE_POINTER_LOCK: 266 case WEB_VIEW_PERMISSION_TYPE_POINTER_LOCK:
266 content::RecordAction( 267 content::RecordAction(
267 UserMetricsAction("WebView.PermissionDeny.PointerLock")); 268 UserMetricsAction("WebView.PermissionDeny.PointerLock"));
(...skipping 651 matching lines...) Expand 10 before | Expand all | Expand 10 after
919 RequestPermission( 920 RequestPermission(
920 static_cast<BrowserPluginPermissionType>( 921 static_cast<BrowserPluginPermissionType>(
921 WEB_VIEW_PERMISSION_TYPE_POINTER_LOCK), 922 WEB_VIEW_PERMISSION_TYPE_POINTER_LOCK),
922 request_info, 923 request_info,
923 base::Bind(&WebViewGuest::OnWebViewPointerLockPermissionResponse, 924 base::Bind(&WebViewGuest::OnWebViewPointerLockPermissionResponse,
924 base::Unretained(this), 925 base::Unretained(this),
925 callback), 926 callback),
926 false /* allowed_by_default */); 927 false /* allowed_by_default */);
927 } 928 }
928 929
930 content::JavaScriptDialogManager*
931 WebViewGuest::GetJavaScriptDialogManager() {
932 return &javascript_dialog_helper_;
933 }
934
929 #if defined(OS_CHROMEOS) 935 #if defined(OS_CHROMEOS)
930 void WebViewGuest::OnAccessibilityStatusChanged( 936 void WebViewGuest::OnAccessibilityStatusChanged(
931 const chromeos::AccessibilityStatusEventDetails& details) { 937 const chromeos::AccessibilityStatusEventDetails& details) {
932 if (details.notification_type == chromeos::ACCESSIBILITY_MANAGER_SHUTDOWN) { 938 if (details.notification_type == chromeos::ACCESSIBILITY_MANAGER_SHUTDOWN) {
933 accessibility_subscription_.reset(); 939 accessibility_subscription_.reset();
934 } else if (details.notification_type == 940 } else if (details.notification_type ==
935 chromeos::ACCESSIBILITY_TOGGLE_SPOKEN_FEEDBACK) { 941 chromeos::ACCESSIBILITY_TOGGLE_SPOKEN_FEEDBACK) {
936 if (details.enabled) 942 if (details.enabled)
937 InjectChromeVoxIfNeeded(guest_web_contents()->GetRenderViewHost()); 943 InjectChromeVoxIfNeeded(guest_web_contents()->GetRenderViewHost());
938 else 944 else
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
985 allowed_by_default, 991 allowed_by_default,
986 std::string())); 992 std::string()));
987 return webview::kInvalidPermissionRequestID; 993 return webview::kInvalidPermissionRequestID;
988 } 994 }
989 995
990 int request_id = next_permission_request_id_++; 996 int request_id = next_permission_request_id_++;
991 pending_permission_requests_[request_id] = 997 pending_permission_requests_[request_id] =
992 PermissionResponseInfo(callback, permission_type, allowed_by_default); 998 PermissionResponseInfo(callback, permission_type, allowed_by_default);
993 scoped_ptr<base::DictionaryValue> args(request_info.DeepCopy()); 999 scoped_ptr<base::DictionaryValue> args(request_info.DeepCopy());
994 args->SetInteger(webview::kRequestId, request_id); 1000 args->SetInteger(webview::kRequestId, request_id);
995 switch (permission_type) { 1001 switch (static_cast<int>(permission_type)) {
996 case BROWSER_PLUGIN_PERMISSION_TYPE_NEW_WINDOW: { 1002 case BROWSER_PLUGIN_PERMISSION_TYPE_NEW_WINDOW: {
997 DispatchEvent(new GuestView::Event(webview::kEventNewWindow, 1003 DispatchEvent(new GuestView::Event(webview::kEventNewWindow,
998 args.Pass())); 1004 args.Pass()));
999 break; 1005 break;
1000 } 1006 }
1001 case BROWSER_PLUGIN_PERMISSION_TYPE_JAVASCRIPT_DIALOG: { 1007 case WEB_VIEW_PERMISSION_TYPE_JAVASCRIPT_DIALOG: {
1002 DispatchEvent(new GuestView::Event(webview::kEventDialog, 1008 DispatchEvent(new GuestView::Event(webview::kEventDialog,
1003 args.Pass())); 1009 args.Pass()));
1004 break; 1010 break;
1005 } 1011 }
1006 default: { 1012 default: {
1007 args->SetString(webview::kPermission, 1013 args->SetString(webview::kPermission,
1008 PermissionTypeToString(permission_type)); 1014 PermissionTypeToString(permission_type));
1009 DispatchEvent(new GuestView::Event(webview::kEventPermissionRequest, 1015 DispatchEvent(new GuestView::Event(webview::kEventPermissionRequest,
1010 args.Pass())); 1016 args.Pass()));
1011 break; 1017 break;
(...skipping 11 matching lines...) Expand all
1023 const PermissionResponseCallback& callback, 1029 const PermissionResponseCallback& callback,
1024 BrowserPluginPermissionType permission_type, 1030 BrowserPluginPermissionType permission_type,
1025 bool allowed_by_default) 1031 bool allowed_by_default)
1026 : callback(callback), 1032 : callback(callback),
1027 permission_type(permission_type), 1033 permission_type(permission_type),
1028 allowed_by_default(allowed_by_default) { 1034 allowed_by_default(allowed_by_default) {
1029 } 1035 }
1030 1036
1031 WebViewGuest::PermissionResponseInfo::~PermissionResponseInfo() { 1037 WebViewGuest::PermissionResponseInfo::~PermissionResponseInfo() {
1032 } 1038 }
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