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

Side by Side Diff: chrome/browser/guest_view/web_view/web_view_guest.cc

Issue 295083002: BrowserPluginGuest is no longer a WebContentsDelegate (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@make_context_menu_easier_to_refactor
Patch Set: Fixed content_browsertests Created 6 years, 7 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 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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/guest_view/web_view/web_view_guest.h" 5 #include "chrome/browser/guest_view/web_view/web_view_guest.h"
6 6
7 #include "base/debug/stack_trace.h" 7 #include "base/debug/stack_trace.h"
8 #include "base/message_loop/message_loop.h" 8 #include "base/message_loop/message_loop.h"
9 #include "base/strings/stringprintf.h" 9 #include "base/strings/stringprintf.h"
10 #include "base/strings/utf_string_conversions.h" 10 #include "base/strings/utf_string_conversions.h"
(...skipping 337 matching lines...) Expand 10 before | Expand all | Expand 10 after
348 scoped_ptr<base::DictionaryValue> args(new base::DictionaryValue()); 348 scoped_ptr<base::DictionaryValue> args(new base::DictionaryValue());
349 scoped_ptr<base::ListValue> items = 349 scoped_ptr<base::ListValue> items =
350 MenuModelToValue(pending_menu_->menu_model()); 350 MenuModelToValue(pending_menu_->menu_model());
351 args->Set(webview::kContextMenuItems, items.release()); 351 args->Set(webview::kContextMenuItems, items.release());
352 args->SetInteger(webview::kRequestId, request_id); 352 args->SetInteger(webview::kRequestId, request_id);
353 DispatchEvent(new GuestViewBase::Event(webview::kEventContextMenu, 353 DispatchEvent(new GuestViewBase::Event(webview::kEventContextMenu,
354 args.Pass())); 354 args.Pass()));
355 return true; 355 return true;
356 } 356 }
357 357
358 void WebViewGuest::AddMessageToConsole(int32 level, 358 bool WebViewGuest::AddMessageToConsole(WebContents* source,
359 int32 level,
359 const base::string16& message, 360 const base::string16& message,
360 int32 line_no, 361 int32 line_no,
361 const base::string16& source_id) { 362 const base::string16& source_id) {
362 scoped_ptr<base::DictionaryValue> args(new base::DictionaryValue()); 363 scoped_ptr<base::DictionaryValue> args(new base::DictionaryValue());
363 // Log levels are from base/logging.h: LogSeverity. 364 // Log levels are from base/logging.h: LogSeverity.
364 args->SetInteger(webview::kLevel, level); 365 args->SetInteger(webview::kLevel, level);
365 args->SetString(webview::kMessage, message); 366 args->SetString(webview::kMessage, message);
366 args->SetInteger(webview::kLine, line_no); 367 args->SetInteger(webview::kLine, line_no);
367 args->SetString(webview::kSourceId, source_id); 368 args->SetString(webview::kSourceId, source_id);
368 DispatchEvent( 369 DispatchEvent(
369 new GuestViewBase::Event(webview::kEventConsoleMessage, args.Pass())); 370 new GuestViewBase::Event(webview::kEventConsoleMessage, args.Pass()));
371 return true;
370 } 372 }
371 373
372 void WebViewGuest::Close() { 374 void WebViewGuest::CloseContents(WebContents* source) {
373 scoped_ptr<base::DictionaryValue> args(new base::DictionaryValue()); 375 scoped_ptr<base::DictionaryValue> args(new base::DictionaryValue());
374 DispatchEvent(new GuestViewBase::Event(webview::kEventClose, args.Pass())); 376 DispatchEvent(new GuestViewBase::Event(webview::kEventClose, args.Pass()));
375 } 377 }
376 378
377 void WebViewGuest::DidAttach() { 379 void WebViewGuest::DidAttach() {
378 if (GetOpener()) { 380 if (GetOpener()) {
379 // We need to do a navigation here if the target URL has changed between 381 // We need to do a navigation here if the target URL has changed between
380 // the time the WebContents was created and the time it was attached. 382 // the time the WebContents was created and the time it was attached.
381 // We also need to do an initial navigation if a RenderView was never 383 // We also need to do an initial navigation if a RenderView was never
382 // created for the new window in cases where there is no referrer. 384 // created for the new window in cases where there is no referrer.
(...skipping 28 matching lines...) Expand all
411 content::BrowserThread::PostTask( 413 content::BrowserThread::PostTask(
412 content::BrowserThread::IO, 414 content::BrowserThread::IO,
413 FROM_HERE, 415 FROM_HERE,
414 base::Bind( 416 base::Bind(
415 &RemoveWebViewEventListenersOnIOThread, 417 &RemoveWebViewEventListenersOnIOThread,
416 browser_context(), embedder_extension_id(), 418 browser_context(), embedder_extension_id(),
417 embedder_render_process_id(), 419 embedder_render_process_id(),
418 view_instance_id())); 420 view_instance_id()));
419 } 421 }
420 422
421 void WebViewGuest::FindReply(int request_id, 423 void WebViewGuest::FindReply(WebContents* source,
424 int request_id,
422 int number_of_matches, 425 int number_of_matches,
423 const gfx::Rect& selection_rect, 426 const gfx::Rect& selection_rect,
424 int active_match_ordinal, 427 int active_match_ordinal,
425 bool final_update) { 428 bool final_update) {
426 find_helper_.FindReply(request_id, number_of_matches, selection_rect, 429 find_helper_.FindReply(request_id, number_of_matches, selection_rect,
427 active_match_ordinal, final_update); 430 active_match_ordinal, final_update);
428 } 431 }
429 432
430 void WebViewGuest::GuestProcessGone(base::TerminationStatus status) { 433 void WebViewGuest::GuestProcessGone(base::TerminationStatus status) {
431 // Cancel all find sessions in progress. 434 // Cancel all find sessions in progress.
432 find_helper_.CancelAllFindSessions(); 435 find_helper_.CancelAllFindSessions();
433 436
434 scoped_ptr<base::DictionaryValue> args(new base::DictionaryValue()); 437 scoped_ptr<base::DictionaryValue> args(new base::DictionaryValue());
435 args->SetInteger(webview::kProcessId, 438 args->SetInteger(webview::kProcessId,
436 guest_web_contents()->GetRenderProcessHost()->GetID()); 439 guest_web_contents()->GetRenderProcessHost()->GetID());
437 args->SetString(webview::kReason, TerminationStatusToString(status)); 440 args->SetString(webview::kReason, TerminationStatusToString(status));
438 DispatchEvent(new GuestViewBase::Event(webview::kEventExit, args.Pass())); 441 DispatchEvent(new GuestViewBase::Event(webview::kEventExit, args.Pass()));
439 } 442 }
440 443
441 void WebViewGuest::HandleKeyboardEvent( 444 void WebViewGuest::HandleKeyboardEvent(
445 WebContents* source,
442 const content::NativeWebKeyboardEvent& event) { 446 const content::NativeWebKeyboardEvent& event) {
443 if (!attached()) 447 if (!attached())
444 return; 448 return;
445 449
446 if (HandleKeyboardShortcuts(event)) 450 if (HandleKeyboardShortcuts(event))
447 return; 451 return;
448 452
449 // Send the unhandled keyboard events back to the embedder to reprocess them. 453 // Send the unhandled keyboard events back to the embedder to reprocess them.
450 // TODO(fsamuel): This introduces the possibility of out-of-order keyboard 454 // TODO(fsamuel): This introduces the possibility of out-of-order keyboard
451 // events because the guest may be arbitrarily delayed when responding to 455 // events because the guest may be arbitrarily delayed when responding to
452 // keyboard events. In that time, the embedder may have received and processed 456 // keyboard events. In that time, the embedder may have received and processed
453 // additional key events. This needs to be fixed as soon as possible. 457 // additional key events. This needs to be fixed as soon as possible.
454 // See http://crbug.com/229882. 458 // See http://crbug.com/229882.
455 embedder_web_contents()->GetDelegate()->HandleKeyboardEvent( 459 embedder_web_contents()->GetDelegate()->HandleKeyboardEvent(
456 web_contents(), event); 460 web_contents(), event);
457 } 461 }
458 462
459 bool WebViewGuest::IsDragAndDropEnabled() { 463 bool WebViewGuest::IsDragAndDropEnabled() {
460 return true; 464 return true;
461 } 465 }
462 466
463 void WebViewGuest::LoadProgressed(double progress) { 467 void WebViewGuest::LoadProgressChanged(content::WebContents* source,
468 double progress) {
464 scoped_ptr<base::DictionaryValue> args(new base::DictionaryValue()); 469 scoped_ptr<base::DictionaryValue> args(new base::DictionaryValue());
465 args->SetString(guestview::kUrl, guest_web_contents()->GetURL().spec()); 470 args->SetString(guestview::kUrl, guest_web_contents()->GetURL().spec());
466 args->SetDouble(webview::kProgress, progress); 471 args->SetDouble(webview::kProgress, progress);
467 DispatchEvent( 472 DispatchEvent(
468 new GuestViewBase::Event(webview::kEventLoadProgress, args.Pass())); 473 new GuestViewBase::Event(webview::kEventLoadProgress, args.Pass()));
469 } 474 }
470 475
471 void WebViewGuest::LoadAbort(bool is_top_level, 476 void WebViewGuest::LoadAbort(bool is_top_level,
472 const GURL& url, 477 const GURL& url,
473 const std::string& error_type) { 478 const std::string& error_type) {
(...skipping 11 matching lines...) Expand all
485 return; 490 return;
486 491
487 if (name_ == name) 492 if (name_ == name)
488 return; 493 return;
489 494
490 ReportFrameNameChange(name); 495 ReportFrameNameChange(name);
491 } 496 }
492 497
493 WebViewGuest* WebViewGuest::CreateNewGuestWindow( 498 WebViewGuest* WebViewGuest::CreateNewGuestWindow(
494 const content::OpenURLParams& params) { 499 const content::OpenURLParams& params) {
495
496 GuestViewManager* guest_manager = 500 GuestViewManager* guest_manager =
497 GuestViewManager::FromBrowserContext(browser_context()); 501 GuestViewManager::FromBrowserContext(browser_context());
498 // Allocate a new instance ID for the new guest. 502 // Allocate a new instance ID for the new guest.
499 int instance_id = guest_manager->GetNextInstanceID(); 503 int instance_id = guest_manager->GetNextInstanceID();
500 504
501 // Set the attach params to use the same partition as the opener. 505 // Set the attach params to use the same partition as the opener.
502 // We pull the partition information from the site's URL, which is of the 506 // We pull the partition information from the site's URL, which is of the
503 // form guest://site/{persist}?{partition_name}. 507 // form guest://site/{persist}?{partition_name}.
504 const GURL& site_url = guest_web_contents()->GetSiteInstance()->GetSiteURL(); 508 const GURL& site_url = guest_web_contents()->GetSiteInstance()->GetSiteURL();
505 509
(...skipping 18 matching lines...) Expand all
524 // Request permission to show the new window. 528 // Request permission to show the new window.
525 RequestNewWindowPermission(params.disposition, gfx::Rect(), 529 RequestNewWindowPermission(params.disposition, gfx::Rect(),
526 params.user_gesture, 530 params.user_gesture,
527 new_guest->guest_web_contents()); 531 new_guest->guest_web_contents());
528 532
529 return new_guest; 533 return new_guest;
530 } 534 }
531 535
532 // TODO(fsamuel): Find a reliable way to test the 'responsive' and 536 // TODO(fsamuel): Find a reliable way to test the 'responsive' and
533 // 'unresponsive' events. 537 // 'unresponsive' events.
534 void WebViewGuest::RendererResponsive() { 538 void WebViewGuest::RendererResponsive(content::WebContents* source) {
535 scoped_ptr<base::DictionaryValue> args(new base::DictionaryValue()); 539 scoped_ptr<base::DictionaryValue> args(new base::DictionaryValue());
536 args->SetInteger(webview::kProcessId, 540 args->SetInteger(webview::kProcessId,
537 guest_web_contents()->GetRenderProcessHost()->GetID()); 541 guest_web_contents()->GetRenderProcessHost()->GetID());
538 DispatchEvent( 542 DispatchEvent(
539 new GuestViewBase::Event(webview::kEventResponsive, args.Pass())); 543 new GuestViewBase::Event(webview::kEventResponsive, args.Pass()));
540 } 544 }
541 545
542 void WebViewGuest::RendererUnresponsive() { 546 void WebViewGuest::RendererUnresponsive(content::WebContents* source) {
543 scoped_ptr<base::DictionaryValue> args(new base::DictionaryValue()); 547 scoped_ptr<base::DictionaryValue> args(new base::DictionaryValue());
544 args->SetInteger(webview::kProcessId, 548 args->SetInteger(webview::kProcessId,
545 guest_web_contents()->GetRenderProcessHost()->GetID()); 549 guest_web_contents()->GetRenderProcessHost()->GetID());
546 DispatchEvent( 550 DispatchEvent(
547 new GuestViewBase::Event(webview::kEventUnresponsive, args.Pass())); 551 new GuestViewBase::Event(webview::kEventUnresponsive, args.Pass()));
548 } 552 }
549 553
550 void WebViewGuest::Observe(int type, 554 void WebViewGuest::Observe(int type,
551 const content::NotificationSource& source, 555 const content::NotificationSource& source,
552 const content::NotificationDetails& details) { 556 const content::NotificationDetails& details) {
(...skipping 419 matching lines...) Expand 10 before | Expand all | Expand 10 after
972 scoped_ptr<base::DictionaryValue> args(new base::DictionaryValue()); 976 scoped_ptr<base::DictionaryValue> args(new base::DictionaryValue());
973 args->SetInteger(webview::kOldHeight, old_size.height()); 977 args->SetInteger(webview::kOldHeight, old_size.height());
974 args->SetInteger(webview::kOldWidth, old_size.width()); 978 args->SetInteger(webview::kOldWidth, old_size.width());
975 args->SetInteger(webview::kNewHeight, new_size.height()); 979 args->SetInteger(webview::kNewHeight, new_size.height());
976 args->SetInteger(webview::kNewWidth, new_size.width()); 980 args->SetInteger(webview::kNewWidth, new_size.width());
977 DispatchEvent( 981 DispatchEvent(
978 new GuestViewBase::Event(webview::kEventSizeChanged, args.Pass())); 982 new GuestViewBase::Event(webview::kEventSizeChanged, args.Pass()));
979 } 983 }
980 984
981 void WebViewGuest::RequestMediaAccessPermission( 985 void WebViewGuest::RequestMediaAccessPermission(
986 content::WebContents* source,
982 const content::MediaStreamRequest& request, 987 const content::MediaStreamRequest& request,
983 const content::MediaResponseCallback& callback) { 988 const content::MediaResponseCallback& callback) {
984 base::DictionaryValue request_info; 989 base::DictionaryValue request_info;
985 request_info.Set( 990 request_info.Set(
986 guestview::kUrl, 991 guestview::kUrl,
987 base::Value::CreateStringValue(request.security_origin.spec())); 992 base::Value::CreateStringValue(request.security_origin.spec()));
988 RequestPermission(WEB_VIEW_PERMISSION_TYPE_MEDIA, 993 RequestPermission(WEB_VIEW_PERMISSION_TYPE_MEDIA,
989 request_info, 994 request_info,
990 base::Bind(&WebViewGuest::OnWebViewMediaPermissionResponse, 995 base::Bind(&WebViewGuest::OnWebViewMediaPermissionResponse,
991 base::Unretained(this), 996 base::Unretained(this),
992 request, 997 request,
993 callback), 998 callback),
994 false /* allowed_by_default */); 999 false /* allowed_by_default */);
995 } 1000 }
996 1001
997 void WebViewGuest::CanDownload( 1002 void WebViewGuest::CanDownload(
1003 content::RenderViewHost* render_view_host,
1004 const GURL& url,
998 const std::string& request_method, 1005 const std::string& request_method,
999 const GURL& url,
1000 const base::Callback<void(bool)>& callback) { 1006 const base::Callback<void(bool)>& callback) {
1001 base::DictionaryValue request_info; 1007 base::DictionaryValue request_info;
1002 request_info.Set( 1008 request_info.Set(
1003 guestview::kUrl, 1009 guestview::kUrl,
1004 base::Value::CreateStringValue(url.spec())); 1010 base::Value::CreateStringValue(url.spec()));
1005 RequestPermission( 1011 RequestPermission(
1006 WEB_VIEW_PERMISSION_TYPE_DOWNLOAD, 1012 WEB_VIEW_PERMISSION_TYPE_DOWNLOAD,
1007 request_info, 1013 request_info,
1008 base::Bind(&WebViewGuest::OnWebViewDownloadPermissionResponse, 1014 base::Bind(&WebViewGuest::OnWebViewDownloadPermissionResponse,
1009 base::Unretained(this), 1015 base::Unretained(this),
(...skipping 394 matching lines...) Expand 10 before | Expand all | Expand 10 after
1404 bool allow, 1410 bool allow,
1405 const std::string& user_input) { 1411 const std::string& user_input) {
1406 WebViewGuest* guest = 1412 WebViewGuest* guest =
1407 WebViewGuest::From(embedder_render_process_id(), new_window_instance_id); 1413 WebViewGuest::From(embedder_render_process_id(), new_window_instance_id);
1408 if (!guest) 1414 if (!guest)
1409 return; 1415 return;
1410 1416
1411 if (!allow) 1417 if (!allow)
1412 guest->Destroy(); 1418 guest->Destroy();
1413 } 1419 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698