Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 "content/browser/browser_plugin/browser_plugin_guest.h" | 5 #include "content/browser/browser_plugin/browser_plugin_guest.h" |
| 6 | 6 |
| 7 #include <algorithm> | 7 #include <algorithm> |
| 8 | 8 |
| 9 #include "base/message_loop/message_loop.h" | 9 #include "base/message_loop/message_loop.h" |
| 10 #include "base/strings/string_util.h" | 10 #include "base/strings/string_util.h" |
| (...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 45 #include "net/url_request/url_request.h" | 45 #include "net/url_request/url_request.h" |
| 46 #include "third_party/WebKit/public/web/WebCursorInfo.h" | 46 #include "third_party/WebKit/public/web/WebCursorInfo.h" |
| 47 #include "ui/events/keycodes/keyboard_codes.h" | 47 #include "ui/events/keycodes/keyboard_codes.h" |
| 48 #include "ui/surface/transport_dib.h" | 48 #include "ui/surface/transport_dib.h" |
| 49 #include "webkit/common/resource_type.h" | 49 #include "webkit/common/resource_type.h" |
| 50 | 50 |
| 51 #if defined(OS_MACOSX) | 51 #if defined(OS_MACOSX) |
| 52 #include "content/browser/browser_plugin/browser_plugin_popup_menu_helper_mac.h" | 52 #include "content/browser/browser_plugin/browser_plugin_popup_menu_helper_mac.h" |
| 53 #endif | 53 #endif |
| 54 | 54 |
| 55 namespace { | |
| 56 enum UmaType { | |
| 57 UMA_TYPE_DOWNLOAD, | |
| 58 UMA_TYPE_GEOLOCATION, | |
| 59 UMA_TYPE_MEDIA, | |
| 60 UMA_TYPE_POINTER_LOCK, | |
| 61 UMA_TYPE_NEW_WINDOW, | |
| 62 UMA_TYPE_JAVASCRIPT_DIALOG, | |
| 63 }; | |
| 64 } // namespace | |
| 65 | |
| 55 namespace content { | 66 namespace content { |
| 56 | 67 |
| 57 // static | 68 // static |
| 58 BrowserPluginHostFactory* BrowserPluginGuest::factory_ = NULL; | 69 BrowserPluginHostFactory* BrowserPluginGuest::factory_ = NULL; |
| 59 | 70 |
| 60 // Parent class for the various types of permission requests, each of which | 71 // Parent class for the various types of permission requests, each of which |
| 61 // should be able to handle the response to their permission request. | 72 // should be able to handle the response to their permission request. |
| 62 class BrowserPluginGuest::PermissionRequest : | 73 class BrowserPluginGuest::PermissionRequest : |
| 63 public base::RefCounted<BrowserPluginGuest::PermissionRequest> { | 74 public base::RefCounted<BrowserPluginGuest::PermissionRequest> { |
| 64 public: | 75 public: |
| 65 virtual void Respond(bool should_allow, const std::string& user_input) = 0; | 76 virtual void Respond(bool should_allow, |
| 77 const std::string& user_input, | |
| 78 bool user_initiated) = 0; | |
| 66 virtual bool AllowedByDefault() const { | 79 virtual bool AllowedByDefault() const { |
| 67 return false; | 80 return false; |
| 68 } | 81 } |
| 82 | |
| 69 protected: | 83 protected: |
| 70 PermissionRequest() { | 84 PermissionRequest() { |
| 71 RecordAction(UserMetricsAction("BrowserPlugin.Guest.PermissionRequest")); | 85 RecordAction(UserMetricsAction("BrowserPlugin.Guest.PermissionRequest")); |
| 72 } | 86 } |
| 73 virtual ~PermissionRequest() {} | 87 virtual ~PermissionRequest() {} |
| 88 | |
| 89 // Only record user initiated (i.e. non-default) actions. | |
| 90 void MaybeRecordUserMetrics(UmaType uma_type, | |
| 91 bool allow, | |
| 92 bool user_initiated) const { | |
| 93 if (!user_initiated) | |
| 94 return; | |
| 95 | |
| 96 if (allow) { | |
| 97 // Note that |allow| == true means the embedder explicitly allowed the | |
| 98 // request. For some requests they might still fail. An example of such | |
| 99 // scenario would be: an embedder allows geolocation request but doesn't | |
| 100 // have geolocation access on its own. | |
| 101 switch (uma_type) { | |
| 102 case UMA_TYPE_DOWNLOAD: | |
| 103 RecordAction(UserMetricsAction( | |
| 104 "BrowserPlugin.Guest.PermissionAllow.Download")); | |
|
Fady Samuel
2013/11/13 15:54:05
All these strings are really similar. Can't you si
lazyboy
2013/11/13 17:35:33
As discussed offline and after talking to sadrul@,
| |
| 105 break; | |
| 106 case UMA_TYPE_GEOLOCATION: | |
| 107 RecordAction(UserMetricsAction( | |
| 108 "BrowserPlugin.Guest.PermissionAllow.Geolocation")); | |
| 109 break; | |
| 110 case UMA_TYPE_MEDIA: | |
| 111 RecordAction(UserMetricsAction( | |
| 112 "BrowserPlugin.Guest.PermissionAllow.Media")); | |
| 113 break; | |
| 114 case UMA_TYPE_POINTER_LOCK: | |
| 115 RecordAction(UserMetricsAction( | |
| 116 "BrowserPlugin.Guest.PermissionAllow.PointerLock")); | |
| 117 break; | |
| 118 case UMA_TYPE_NEW_WINDOW: | |
| 119 RecordAction(UserMetricsAction( | |
| 120 "BrowserPlugin.Guest.PermissionAllow.NewWindow")); | |
| 121 break; | |
| 122 case UMA_TYPE_JAVASCRIPT_DIALOG: | |
| 123 RecordAction( | |
| 124 UserMetricsAction( | |
| 125 "BrowserPlugin.Guest.PermissionAllow.JavaScriptDialog")); | |
| 126 break; | |
| 127 } | |
| 128 } else { | |
| 129 switch (uma_type) { | |
| 130 case UMA_TYPE_DOWNLOAD: | |
| 131 RecordAction(UserMetricsAction( | |
| 132 "BrowserPlugin.Guest.PermissionDeny.Download")); | |
| 133 break; | |
| 134 case UMA_TYPE_GEOLOCATION: | |
| 135 RecordAction(UserMetricsAction( | |
| 136 "BrowserPlugin.Guest.PermissionDeny.Geolocation")); | |
| 137 break; | |
| 138 case UMA_TYPE_MEDIA: | |
| 139 RecordAction(UserMetricsAction( | |
| 140 "BrowserPlugin.Guest.PermissionDeny.Media")); | |
| 141 break; | |
| 142 case UMA_TYPE_POINTER_LOCK: | |
| 143 RecordAction(UserMetricsAction( | |
| 144 "BrowserPlugin.Guest.PermissionDeny.PointerLock")); | |
| 145 break; | |
| 146 case UMA_TYPE_NEW_WINDOW: | |
| 147 RecordAction(UserMetricsAction( | |
| 148 "BrowserPlugin.Guest.PermissionDeny.NewWindow")); | |
| 149 break; | |
| 150 case UMA_TYPE_JAVASCRIPT_DIALOG: | |
| 151 RecordAction( | |
| 152 UserMetricsAction( | |
| 153 "BrowserPlugin.Guest.PermissionDeny.JavaScriptDialog")); | |
| 154 break; | |
| 155 } | |
| 156 } | |
| 157 } | |
| 158 | |
| 74 // Friend RefCounted so that the dtor can be non-public. | 159 // Friend RefCounted so that the dtor can be non-public. |
| 75 friend class base::RefCounted<BrowserPluginGuest::PermissionRequest>; | 160 friend class base::RefCounted<BrowserPluginGuest::PermissionRequest>; |
| 76 }; | 161 }; |
| 77 | 162 |
| 78 class BrowserPluginGuest::DownloadRequest : public PermissionRequest { | 163 class BrowserPluginGuest::DownloadRequest : public PermissionRequest { |
| 79 public: | 164 public: |
| 80 explicit DownloadRequest(base::Callback<void(bool)> callback) | 165 explicit DownloadRequest(base::Callback<void(bool)> callback) |
| 81 : callback_(callback) { | 166 : callback_(callback) { |
| 82 RecordAction( | 167 RecordAction( |
| 83 UserMetricsAction("BrowserPlugin.Guest.PermissionRequest.Download")); | 168 UserMetricsAction("BrowserPlugin.Guest.PermissionRequest.Download")); |
| 84 } | 169 } |
| 85 virtual void Respond(bool should_allow, | 170 virtual void Respond(bool should_allow, |
| 86 const std::string& user_input) OVERRIDE { | 171 const std::string& user_input, |
| 172 bool user_initiated) OVERRIDE { | |
| 87 callback_.Run(should_allow); | 173 callback_.Run(should_allow); |
| 174 MaybeRecordUserMetrics(UMA_TYPE_DOWNLOAD, should_allow, user_initiated); | |
| 88 } | 175 } |
| 89 | 176 |
| 90 private: | 177 private: |
| 91 virtual ~DownloadRequest() {} | 178 virtual ~DownloadRequest() {} |
| 92 base::Callback<void(bool)> callback_; | 179 base::Callback<void(bool)> callback_; |
| 93 }; | 180 }; |
| 94 | 181 |
| 95 class BrowserPluginGuest::GeolocationRequest : public PermissionRequest { | 182 class BrowserPluginGuest::GeolocationRequest : public PermissionRequest { |
| 96 public: | 183 public: |
| 97 GeolocationRequest(GeolocationCallback callback, | 184 GeolocationRequest(GeolocationCallback callback, |
| 98 int bridge_id, | 185 int bridge_id, |
| 99 base::WeakPtrFactory<BrowserPluginGuest>* weak_ptr_factory) | 186 base::WeakPtrFactory<BrowserPluginGuest>* weak_ptr_factory) |
| 100 : callback_(callback), | 187 : callback_(callback), |
| 101 bridge_id_(bridge_id), | 188 bridge_id_(bridge_id), |
| 102 weak_ptr_factory_(weak_ptr_factory) { | 189 weak_ptr_factory_(weak_ptr_factory) { |
| 103 RecordAction( | 190 RecordAction( |
| 104 UserMetricsAction("BrowserPlugin.Guest.PermissionRequest.Geolocation")); | 191 UserMetricsAction("BrowserPlugin.Guest.PermissionRequest.Geolocation")); |
| 105 } | 192 } |
| 106 | 193 |
| 107 virtual void Respond(bool should_allow, | 194 virtual void Respond(bool should_allow, |
| 108 const std::string& user_input) OVERRIDE { | 195 const std::string& user_input, |
| 196 bool user_initiated) OVERRIDE { | |
| 109 base::WeakPtr<BrowserPluginGuest> guest(weak_ptr_factory_->GetWeakPtr()); | 197 base::WeakPtr<BrowserPluginGuest> guest(weak_ptr_factory_->GetWeakPtr()); |
| 110 | 198 |
| 199 MaybeRecordUserMetrics(UMA_TYPE_GEOLOCATION, should_allow, user_initiated); | |
| 111 WebContents* web_contents = guest->embedder_web_contents(); | 200 WebContents* web_contents = guest->embedder_web_contents(); |
| 112 if (should_allow && web_contents) { | 201 if (should_allow && web_contents) { |
| 113 // If renderer side embedder decides to allow gelocation, we need to check | 202 // If renderer side embedder decides to allow gelocation, we need to check |
| 114 // if the app/embedder itself has geolocation access. | 203 // if the app/embedder itself has geolocation access. |
| 115 BrowserContext* browser_context = web_contents->GetBrowserContext(); | 204 BrowserContext* browser_context = web_contents->GetBrowserContext(); |
| 116 if (browser_context) { | 205 if (browser_context) { |
| 117 GeolocationPermissionContext* geolocation_context = | 206 GeolocationPermissionContext* geolocation_context = |
| 118 browser_context->GetGeolocationPermissionContext(); | 207 browser_context->GetGeolocationPermissionContext(); |
| 119 if (geolocation_context) { | 208 if (geolocation_context) { |
| 120 base::Callback<void(bool)> geolocation_callback = base::Bind( | 209 base::Callback<void(bool)> geolocation_callback = base::Bind( |
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 152 const MediaResponseCallback& callback, | 241 const MediaResponseCallback& callback, |
| 153 BrowserPluginGuest* guest) | 242 BrowserPluginGuest* guest) |
| 154 : request_(request), | 243 : request_(request), |
| 155 callback_(callback), | 244 callback_(callback), |
| 156 guest_(guest) { | 245 guest_(guest) { |
| 157 RecordAction( | 246 RecordAction( |
| 158 UserMetricsAction("BrowserPlugin.Guest.PermissionRequest.Media")); | 247 UserMetricsAction("BrowserPlugin.Guest.PermissionRequest.Media")); |
| 159 } | 248 } |
| 160 | 249 |
| 161 virtual void Respond(bool should_allow, | 250 virtual void Respond(bool should_allow, |
| 162 const std::string& user_input) OVERRIDE { | 251 const std::string& user_input, |
| 252 bool user_initiated) OVERRIDE { | |
| 163 WebContentsImpl* web_contents = guest_->embedder_web_contents(); | 253 WebContentsImpl* web_contents = guest_->embedder_web_contents(); |
| 164 if (should_allow && web_contents) { | 254 if (should_allow && web_contents) { |
| 165 // Re-route the request to the embedder's WebContents; the guest gets the | 255 // Re-route the request to the embedder's WebContents; the guest gets the |
| 166 // permission this way. | 256 // permission this way. |
| 167 web_contents->RequestMediaAccessPermission(request_, callback_); | 257 web_contents->RequestMediaAccessPermission(request_, callback_); |
| 168 } else { | 258 } else { |
| 169 // Deny the request. | 259 // Deny the request. |
| 170 callback_.Run(MediaStreamDevices(), scoped_ptr<MediaStreamUI>()); | 260 callback_.Run(MediaStreamDevices(), scoped_ptr<MediaStreamUI>()); |
| 171 } | 261 } |
| 262 MaybeRecordUserMetrics(UMA_TYPE_MEDIA, should_allow, user_initiated); | |
| 172 } | 263 } |
| 173 | 264 |
| 174 private: | 265 private: |
| 175 virtual ~MediaRequest() {} | 266 virtual ~MediaRequest() {} |
| 176 MediaStreamRequest request_; | 267 MediaStreamRequest request_; |
| 177 MediaResponseCallback callback_; | 268 MediaResponseCallback callback_; |
| 178 BrowserPluginGuest* guest_; | 269 BrowserPluginGuest* guest_; |
| 179 }; | 270 }; |
| 180 | 271 |
| 181 class BrowserPluginGuest::NewWindowRequest : public PermissionRequest { | 272 class BrowserPluginGuest::NewWindowRequest : public PermissionRequest { |
| 182 public: | 273 public: |
| 183 NewWindowRequest(int instance_id, BrowserPluginGuest* guest) | 274 NewWindowRequest(int instance_id, BrowserPluginGuest* guest) |
| 184 : instance_id_(instance_id), | 275 : instance_id_(instance_id), |
| 185 guest_(guest) { | 276 guest_(guest) { |
| 186 RecordAction( | 277 RecordAction( |
| 187 UserMetricsAction("BrowserPlugin.Guest.PermissionRequest.NewWindow")); | 278 UserMetricsAction("BrowserPlugin.Guest.PermissionRequest.NewWindow")); |
| 188 } | 279 } |
| 189 | 280 |
| 190 virtual void Respond(bool should_allow, | 281 virtual void Respond(bool should_allow, |
| 191 const std::string& user_input) OVERRIDE { | 282 const std::string& user_input, |
| 283 bool user_initiated) OVERRIDE { | |
| 192 int embedder_render_process_id = | 284 int embedder_render_process_id = |
| 193 guest_->embedder_web_contents()->GetRenderProcessHost()->GetID(); | 285 guest_->embedder_web_contents()->GetRenderProcessHost()->GetID(); |
| 194 BrowserPluginGuest* guest = | 286 BrowserPluginGuest* guest = |
| 195 guest_->GetWebContents()->GetBrowserPluginGuestManager()-> | 287 guest_->GetWebContents()->GetBrowserPluginGuestManager()-> |
| 196 GetGuestByInstanceID(instance_id_, embedder_render_process_id); | 288 GetGuestByInstanceID(instance_id_, embedder_render_process_id); |
| 197 if (!guest) { | 289 if (!guest) { |
| 198 LOG(INFO) << "Guest not found. Instance ID: " << instance_id_; | 290 LOG(INFO) << "Guest not found. Instance ID: " << instance_id_; |
| 199 return; | 291 return; |
| 200 } | 292 } |
| 201 | 293 |
| 294 MaybeRecordUserMetrics(UMA_TYPE_NEW_WINDOW, should_allow, user_initiated); | |
| 202 // If we do not destroy the guest then we allow the new window. | 295 // If we do not destroy the guest then we allow the new window. |
| 203 if (!should_allow) | 296 if (!should_allow) |
| 204 guest->Destroy(); | 297 guest->Destroy(); |
| 205 } | 298 } |
| 206 | 299 |
| 207 private: | 300 private: |
| 208 virtual ~NewWindowRequest() {} | 301 virtual ~NewWindowRequest() {} |
| 209 int instance_id_; | 302 int instance_id_; |
| 210 BrowserPluginGuest* guest_; | 303 BrowserPluginGuest* guest_; |
| 211 }; | 304 }; |
| 212 | 305 |
| 213 class BrowserPluginGuest::JavaScriptDialogRequest : public PermissionRequest { | 306 class BrowserPluginGuest::JavaScriptDialogRequest : public PermissionRequest { |
| 214 public: | 307 public: |
| 215 JavaScriptDialogRequest(const DialogClosedCallback& callback) | 308 JavaScriptDialogRequest(const DialogClosedCallback& callback) |
| 216 : callback_(callback) { | 309 : callback_(callback) { |
| 217 RecordAction( | 310 RecordAction( |
| 218 UserMetricsAction( | 311 UserMetricsAction( |
| 219 "BrowserPlugin.Guest.PermissionRequest.JavaScriptDialog")); | 312 "BrowserPlugin.Guest.PermissionRequest.JavaScriptDialog")); |
| 220 } | 313 } |
| 221 | 314 |
| 222 virtual void Respond(bool should_allow, | 315 virtual void Respond(bool should_allow, |
| 223 const std::string& user_input) OVERRIDE { | 316 const std::string& user_input, |
| 317 bool user_initiated) OVERRIDE { | |
| 224 callback_.Run(should_allow, UTF8ToUTF16(user_input)); | 318 callback_.Run(should_allow, UTF8ToUTF16(user_input)); |
| 319 MaybeRecordUserMetrics(UMA_TYPE_JAVASCRIPT_DIALOG, should_allow, | |
| 320 user_initiated); | |
| 225 } | 321 } |
| 226 | 322 |
| 227 private: | 323 private: |
| 228 virtual ~JavaScriptDialogRequest() {} | 324 virtual ~JavaScriptDialogRequest() {} |
| 229 DialogClosedCallback callback_; | 325 DialogClosedCallback callback_; |
| 230 }; | 326 }; |
| 231 | 327 |
| 232 class BrowserPluginGuest::PointerLockRequest : public PermissionRequest { | 328 class BrowserPluginGuest::PointerLockRequest : public PermissionRequest { |
| 233 public: | 329 public: |
| 234 PointerLockRequest(BrowserPluginGuest* guest) | 330 PointerLockRequest(BrowserPluginGuest* guest) |
| 235 : guest_(guest) { | 331 : guest_(guest) { |
| 236 RecordAction( | 332 RecordAction( |
| 237 UserMetricsAction("BrowserPlugin.Guest.PermissionRequest.PointerLock")); | 333 UserMetricsAction("BrowserPlugin.Guest.PermissionRequest.PointerLock")); |
| 238 } | 334 } |
| 239 | 335 |
| 240 virtual void Respond(bool should_allow, | 336 virtual void Respond(bool should_allow, |
| 241 const std::string& user_input) OVERRIDE { | 337 const std::string& user_input, |
| 338 bool user_initiated) OVERRIDE { | |
| 242 guest_->SendMessageToEmbedder( | 339 guest_->SendMessageToEmbedder( |
| 243 new BrowserPluginMsg_SetMouseLock(guest_->instance_id(), should_allow)); | 340 new BrowserPluginMsg_SetMouseLock(guest_->instance_id(), should_allow)); |
| 341 MaybeRecordUserMetrics(UMA_TYPE_POINTER_LOCK, should_allow, user_initiated); | |
| 244 } | 342 } |
| 245 | 343 |
| 246 private: | 344 private: |
| 247 virtual ~PointerLockRequest() {} | 345 virtual ~PointerLockRequest() {} |
| 248 BrowserPluginGuest* guest_; | 346 BrowserPluginGuest* guest_; |
| 249 }; | 347 }; |
| 250 | 348 |
| 251 namespace { | 349 namespace { |
| 252 std::string WindowOpenDispositionToString( | 350 std::string WindowOpenDispositionToString( |
| 253 WindowOpenDisposition window_open_disposition) { | 351 WindowOpenDisposition window_open_disposition) { |
| (...skipping 148 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 402 if (delegate_ && delegate_->IsOverridingUserAgent()) { | 500 if (delegate_ && delegate_->IsOverridingUserAgent()) { |
| 403 load_url_params.override_user_agent = | 501 load_url_params.override_user_agent = |
| 404 NavigationController::UA_OVERRIDE_TRUE; | 502 NavigationController::UA_OVERRIDE_TRUE; |
| 405 } | 503 } |
| 406 web_contents->GetController().LoadURLWithParams(load_url_params); | 504 web_contents->GetController().LoadURLWithParams(load_url_params); |
| 407 } | 505 } |
| 408 | 506 |
| 409 void BrowserPluginGuest::RespondToPermissionRequest( | 507 void BrowserPluginGuest::RespondToPermissionRequest( |
| 410 int request_id, | 508 int request_id, |
| 411 bool should_allow, | 509 bool should_allow, |
| 412 const std::string& user_input) { | 510 const std::string& user_input, |
| 511 bool user_initiated) { | |
| 413 RequestMap::iterator request_itr = permission_request_map_.find(request_id); | 512 RequestMap::iterator request_itr = permission_request_map_.find(request_id); |
| 414 if (request_itr == permission_request_map_.end()) { | 513 if (request_itr == permission_request_map_.end()) { |
| 415 LOG(INFO) << "Not a valid request ID."; | 514 LOG(INFO) << "Not a valid request ID."; |
| 416 return; | 515 return; |
| 417 } | 516 } |
| 418 request_itr->second->Respond(should_allow, user_input); | 517 request_itr->second->Respond(should_allow, user_input, user_initiated); |
| 419 permission_request_map_.erase(request_itr); | 518 permission_request_map_.erase(request_itr); |
| 420 } | 519 } |
| 421 | 520 |
| 422 int BrowserPluginGuest::RequestPermission( | 521 int BrowserPluginGuest::RequestPermission( |
| 423 BrowserPluginPermissionType permission_type, | 522 BrowserPluginPermissionType permission_type, |
| 424 scoped_refptr<BrowserPluginGuest::PermissionRequest> request, | 523 scoped_refptr<BrowserPluginGuest::PermissionRequest> request, |
| 425 const base::DictionaryValue& request_info) { | 524 const base::DictionaryValue& request_info) { |
| 426 if (!delegate_) { | 525 if (!delegate_) { |
| 427 request->Respond(false, ""); | 526 request->Respond(false, "", false); |
| 428 return browser_plugin::kInvalidPermissionRequestID; | 527 return browser_plugin::kInvalidPermissionRequestID; |
| 429 } | 528 } |
| 430 | 529 |
| 431 int request_id = ++next_permission_request_id_; | 530 int request_id = ++next_permission_request_id_; |
| 432 permission_request_map_[request_id] = request; | 531 permission_request_map_[request_id] = request; |
| 433 | 532 |
| 434 BrowserPluginGuestDelegate::PermissionResponseCallback callback = | 533 BrowserPluginGuestDelegate::PermissionResponseCallback callback = |
| 435 base::Bind(&BrowserPluginGuest::RespondToPermissionRequest, | 534 base::Bind(&BrowserPluginGuest::RespondToPermissionRequest, |
| 436 AsWeakPtr(), | 535 AsWeakPtr(), |
| 437 request_id); | 536 request_id); |
| 438 // If BrowserPluginGuestDelegate hasn't handled the permission then we simply | 537 // If BrowserPluginGuestDelegate hasn't handled the permission then we simply |
| 439 // reject it immediately. | 538 // perform the default action (which is one of allow or reject) immediately. |
| 440 if (!delegate_->RequestPermission( | 539 if (!delegate_->RequestPermission( |
| 441 permission_type, request_info, callback, request->AllowedByDefault())) { | 540 permission_type, request_info, callback, request->AllowedByDefault())) { |
| 442 callback.Run(request->AllowedByDefault(), ""); | 541 callback.Run(request->AllowedByDefault(), "", false); |
| 443 return browser_plugin::kInvalidPermissionRequestID; | 542 return browser_plugin::kInvalidPermissionRequestID; |
| 444 } | 543 } |
| 445 | 544 |
| 446 return request_id; | 545 return request_id; |
| 447 } | 546 } |
| 448 | 547 |
| 449 BrowserPluginGuest* BrowserPluginGuest::CreateNewGuestWindow( | 548 BrowserPluginGuest* BrowserPluginGuest::CreateNewGuestWindow( |
| 450 const OpenURLParams& params) { | 549 const OpenURLParams& params) { |
| 451 BrowserPluginGuestManager* guest_manager = | 550 BrowserPluginGuestManager* guest_manager = |
| 452 GetWebContents()->GetBrowserPluginGuestManager(); | 551 GetWebContents()->GetBrowserPluginGuestManager(); |
| (...skipping 1278 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1731 request_info.Set(browser_plugin::kRequestMethod, | 1830 request_info.Set(browser_plugin::kRequestMethod, |
| 1732 base::Value::CreateStringValue(request_method)); | 1831 base::Value::CreateStringValue(request_method)); |
| 1733 request_info.Set(browser_plugin::kURL, base::Value::CreateStringValue(url)); | 1832 request_info.Set(browser_plugin::kURL, base::Value::CreateStringValue(url)); |
| 1734 | 1833 |
| 1735 RequestPermission(BROWSER_PLUGIN_PERMISSION_TYPE_DOWNLOAD, | 1834 RequestPermission(BROWSER_PLUGIN_PERMISSION_TYPE_DOWNLOAD, |
| 1736 new DownloadRequest(callback), | 1835 new DownloadRequest(callback), |
| 1737 request_info); | 1836 request_info); |
| 1738 } | 1837 } |
| 1739 | 1838 |
| 1740 } // namespace content | 1839 } // namespace content |
| OLD | NEW |