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

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

Issue 525793002: Make WebContentsObserver::web_contents() public (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Comments addressed Created 6 years, 3 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 "extensions/browser/guest_view/web_view/web_view_guest.h" 5 #include "extensions/browser/guest_view/web_view/web_view_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 "base/strings/utf_string_conversions.h" 9 #include "base/strings/utf_string_conversions.h"
10 #include "content/public/browser/browser_context.h" 10 #include "content/public/browser/browser_context.h"
(...skipping 255 matching lines...) Expand 10 before | Expand all | Expand 10 after
266 266
267 if (GetOpener()) { 267 if (GetOpener()) {
268 // We need to do a navigation here if the target URL has changed between 268 // We need to do a navigation here if the target URL has changed between
269 // the time the WebContents was created and the time it was attached. 269 // the time the WebContents was created and the time it was attached.
270 // We also need to do an initial navigation if a RenderView was never 270 // We also need to do an initial navigation if a RenderView was never
271 // created for the new window in cases where there is no referrer. 271 // created for the new window in cases where there is no referrer.
272 PendingWindowMap::iterator it = 272 PendingWindowMap::iterator it =
273 GetOpener()->pending_new_windows_.find(this); 273 GetOpener()->pending_new_windows_.find(this);
274 if (it != GetOpener()->pending_new_windows_.end()) { 274 if (it != GetOpener()->pending_new_windows_.end()) {
275 const NewWindowInfo& new_window_info = it->second; 275 const NewWindowInfo& new_window_info = it->second;
276 if (new_window_info.changed || !guest_web_contents()->HasOpener()) 276 if (new_window_info.changed || !web_contents()->HasOpener())
277 NavigateGuest(new_window_info.url.spec()); 277 NavigateGuest(new_window_info.url.spec());
278 } else { 278 } else {
279 NOTREACHED(); 279 NOTREACHED();
280 } 280 }
281 281
282 // Once a new guest is attached to the DOM of the embedder page, then the 282 // Once a new guest is attached to the DOM of the embedder page, then the
283 // lifetime of the new guest is no longer managed by the opener guest. 283 // lifetime of the new guest is no longer managed by the opener guest.
284 GetOpener()->pending_new_windows_.erase(this); 284 GetOpener()->pending_new_windows_.erase(this);
285 } 285 }
286 } 286 }
287 287
288 void WebViewGuest::DidInitialize() { 288 void WebViewGuest::DidInitialize() {
289 script_executor_.reset( 289 script_executor_.reset(
290 new ScriptExecutor(guest_web_contents(), &script_observers_)); 290 new ScriptExecutor(web_contents(), &script_observers_));
291 291
292 notification_registrar_.Add( 292 notification_registrar_.Add(this,
293 this, content::NOTIFICATION_LOAD_COMPLETED_MAIN_FRAME, 293 content::NOTIFICATION_LOAD_COMPLETED_MAIN_FRAME,
294 content::Source<WebContents>(guest_web_contents())); 294 content::Source<WebContents>(web_contents()));
295 295
296 notification_registrar_.Add( 296 notification_registrar_.Add(this,
297 this, content::NOTIFICATION_RESOURCE_RECEIVED_REDIRECT, 297 content::NOTIFICATION_RESOURCE_RECEIVED_REDIRECT,
298 content::Source<WebContents>(guest_web_contents())); 298 content::Source<WebContents>(web_contents()));
299 299
300 if (web_view_guest_delegate_) 300 if (web_view_guest_delegate_)
301 web_view_guest_delegate_->OnDidInitialize(); 301 web_view_guest_delegate_->OnDidInitialize();
302 AttachWebViewHelpers(guest_web_contents()); 302 AttachWebViewHelpers(web_contents());
303 } 303 }
304 304
305 void WebViewGuest::AttachWebViewHelpers(WebContents* contents) { 305 void WebViewGuest::AttachWebViewHelpers(WebContents* contents) {
306 if (web_view_guest_delegate_) 306 if (web_view_guest_delegate_)
307 web_view_guest_delegate_->OnAttachWebViewHelpers(contents); 307 web_view_guest_delegate_->OnAttachWebViewHelpers(contents);
308 web_view_permission_helper_.reset(new WebViewPermissionHelper(this)); 308 web_view_permission_helper_.reset(new WebViewPermissionHelper(this));
309 } 309 }
310 310
311 void WebViewGuest::DidStopLoading() { 311 void WebViewGuest::DidStopLoading() {
312 scoped_ptr<base::DictionaryValue> args(new base::DictionaryValue()); 312 scoped_ptr<base::DictionaryValue> args(new base::DictionaryValue());
313 DispatchEventToEmbedder( 313 DispatchEventToEmbedder(
314 new GuestViewBase::Event(webview::kEventLoadStop, args.Pass())); 314 new GuestViewBase::Event(webview::kEventLoadStop, args.Pass()));
315 } 315 }
316 316
317 void WebViewGuest::EmbedderDestroyed() { 317 void WebViewGuest::EmbedderDestroyed() {
318 if (web_view_guest_delegate_) 318 if (web_view_guest_delegate_)
319 web_view_guest_delegate_->OnEmbedderDestroyed(); 319 web_view_guest_delegate_->OnEmbedderDestroyed();
320 } 320 }
321 321
322 void WebViewGuest::GuestDestroyed() { 322 void WebViewGuest::GuestDestroyed() {
323 // Clean up custom context menu items for this guest. 323 // Clean up custom context menu items for this guest.
324 if (web_view_guest_delegate_) 324 if (web_view_guest_delegate_)
325 web_view_guest_delegate_->OnGuestDestroyed(); 325 web_view_guest_delegate_->OnGuestDestroyed();
326 RemoveWebViewStateFromIOThread(web_contents()); 326 RemoveWebViewStateFromIOThread(web_contents());
327 } 327 }
328 328
329 void WebViewGuest::GuestReady() { 329 void WebViewGuest::GuestReady() {
330 // The guest RenderView should always live in an isolated guest process. 330 // The guest RenderView should always live in an isolated guest process.
331 CHECK(guest_web_contents()->GetRenderProcessHost()->IsIsolatedGuest()); 331 CHECK(web_contents()->GetRenderProcessHost()->IsIsolatedGuest());
332 Send(new ExtensionMsg_SetFrameName( 332 Send(new ExtensionMsg_SetFrameName(web_contents()->GetRoutingID(), name_));
333 guest_web_contents()->GetRoutingID(), name_));
334 } 333 }
335 334
336 void WebViewGuest::GuestSizeChangedDueToAutoSize(const gfx::Size& old_size, 335 void WebViewGuest::GuestSizeChangedDueToAutoSize(const gfx::Size& old_size,
337 const gfx::Size& new_size) { 336 const gfx::Size& new_size) {
338 scoped_ptr<base::DictionaryValue> args(new base::DictionaryValue()); 337 scoped_ptr<base::DictionaryValue> args(new base::DictionaryValue());
339 args->SetInteger(webview::kOldHeight, old_size.height()); 338 args->SetInteger(webview::kOldHeight, old_size.height());
340 args->SetInteger(webview::kOldWidth, old_size.width()); 339 args->SetInteger(webview::kOldWidth, old_size.width());
341 args->SetInteger(webview::kNewHeight, new_size.height()); 340 args->SetInteger(webview::kNewHeight, new_size.height());
342 args->SetInteger(webview::kNewWidth, new_size.width()); 341 args->SetInteger(webview::kNewWidth, new_size.width());
343 DispatchEventToEmbedder( 342 DispatchEventToEmbedder(
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after
419 // keyboard events. In that time, the embedder may have received and processed 418 // keyboard events. In that time, the embedder may have received and processed
420 // additional key events. This needs to be fixed as soon as possible. 419 // additional key events. This needs to be fixed as soon as possible.
421 // See http://crbug.com/229882. 420 // See http://crbug.com/229882.
422 embedder_web_contents()->GetDelegate()->HandleKeyboardEvent( 421 embedder_web_contents()->GetDelegate()->HandleKeyboardEvent(
423 web_contents(), event); 422 web_contents(), event);
424 } 423 }
425 424
426 void WebViewGuest::LoadProgressChanged(content::WebContents* source, 425 void WebViewGuest::LoadProgressChanged(content::WebContents* source,
427 double progress) { 426 double progress) {
428 scoped_ptr<base::DictionaryValue> args(new base::DictionaryValue()); 427 scoped_ptr<base::DictionaryValue> args(new base::DictionaryValue());
429 args->SetString(guestview::kUrl, guest_web_contents()->GetURL().spec()); 428 args->SetString(guestview::kUrl, web_contents()->GetURL().spec());
430 args->SetDouble(webview::kProgress, progress); 429 args->SetDouble(webview::kProgress, progress);
431 DispatchEventToEmbedder( 430 DispatchEventToEmbedder(
432 new GuestViewBase::Event(webview::kEventLoadProgress, args.Pass())); 431 new GuestViewBase::Event(webview::kEventLoadProgress, args.Pass()));
433 } 432 }
434 433
435 void WebViewGuest::LoadAbort(bool is_top_level, 434 void WebViewGuest::LoadAbort(bool is_top_level,
436 const GURL& url, 435 const GURL& url,
437 const std::string& error_type) { 436 const std::string& error_type) {
438 scoped_ptr<base::DictionaryValue> args(new base::DictionaryValue()); 437 scoped_ptr<base::DictionaryValue> args(new base::DictionaryValue());
439 args->SetBoolean(guestview::kIsTopLevel, is_top_level); 438 args->SetBoolean(guestview::kIsTopLevel, is_top_level);
(...skipping 14 matching lines...) Expand all
454 ReportFrameNameChange(name); 453 ReportFrameNameChange(name);
455 } 454 }
456 455
457 void WebViewGuest::CreateNewGuestWebViewWindow( 456 void WebViewGuest::CreateNewGuestWebViewWindow(
458 const content::OpenURLParams& params) { 457 const content::OpenURLParams& params) {
459 GuestViewManager* guest_manager = 458 GuestViewManager* guest_manager =
460 GuestViewManager::FromBrowserContext(browser_context()); 459 GuestViewManager::FromBrowserContext(browser_context());
461 // Set the attach params to use the same partition as the opener. 460 // Set the attach params to use the same partition as the opener.
462 // We pull the partition information from the site's URL, which is of the 461 // We pull the partition information from the site's URL, which is of the
463 // form guest://site/{persist}?{partition_name}. 462 // form guest://site/{persist}?{partition_name}.
464 const GURL& site_url = guest_web_contents()->GetSiteInstance()->GetSiteURL(); 463 const GURL& site_url = web_contents()->GetSiteInstance()->GetSiteURL();
465 const std::string storage_partition_id = 464 const std::string storage_partition_id =
466 GetStoragePartitionIdFromSiteURL(site_url); 465 GetStoragePartitionIdFromSiteURL(site_url);
467 base::DictionaryValue create_params; 466 base::DictionaryValue create_params;
468 create_params.SetString(webview::kStoragePartitionId, storage_partition_id); 467 create_params.SetString(webview::kStoragePartitionId, storage_partition_id);
469 468
470 guest_manager->CreateGuest(WebViewGuest::Type, 469 guest_manager->CreateGuest(WebViewGuest::Type,
471 embedder_extension_id(), 470 embedder_extension_id(),
472 embedder_web_contents(), 471 embedder_web_contents(),
473 create_params, 472 create_params,
474 base::Bind(&WebViewGuest::NewGuestWebViewCallback, 473 base::Bind(&WebViewGuest::NewGuestWebViewCallback,
475 base::Unretained(this), 474 base::Unretained(this),
476 params)); 475 params));
477 } 476 }
478 477
479 void WebViewGuest::NewGuestWebViewCallback( 478 void WebViewGuest::NewGuestWebViewCallback(
480 const content::OpenURLParams& params, 479 const content::OpenURLParams& params,
481 content::WebContents* guest_web_contents) { 480 content::WebContents* guest_web_contents) {
482 WebViewGuest* new_guest = WebViewGuest::FromWebContents(guest_web_contents); 481 WebViewGuest* new_guest = WebViewGuest::FromWebContents(guest_web_contents);
483 new_guest->SetOpener(this); 482 new_guest->SetOpener(this);
484 483
485 // Take ownership of |new_guest|. 484 // Take ownership of |new_guest|.
486 pending_new_windows_.insert( 485 pending_new_windows_.insert(
487 std::make_pair(new_guest, NewWindowInfo(params.url, std::string()))); 486 std::make_pair(new_guest, NewWindowInfo(params.url, std::string())));
488 487
489 // Request permission to show the new window. 488 // Request permission to show the new window.
490 RequestNewWindowPermission(params.disposition, gfx::Rect(), 489 RequestNewWindowPermission(params.disposition,
490 gfx::Rect(),
491 params.user_gesture, 491 params.user_gesture,
492 new_guest->guest_web_contents()); 492 new_guest->web_contents());
493 } 493 }
494 494
495 // TODO(fsamuel): Find a reliable way to test the 'responsive' and 495 // TODO(fsamuel): Find a reliable way to test the 'responsive' and
496 // 'unresponsive' events. 496 // 'unresponsive' events.
497 void WebViewGuest::RendererResponsive(content::WebContents* source) { 497 void WebViewGuest::RendererResponsive(content::WebContents* source) {
498 scoped_ptr<base::DictionaryValue> args(new base::DictionaryValue()); 498 scoped_ptr<base::DictionaryValue> args(new base::DictionaryValue());
499 args->SetInteger(webview::kProcessId, 499 args->SetInteger(webview::kProcessId,
500 guest_web_contents()->GetRenderProcessHost()->GetID()); 500 web_contents()->GetRenderProcessHost()->GetID());
501 DispatchEventToEmbedder( 501 DispatchEventToEmbedder(
502 new GuestViewBase::Event(webview::kEventResponsive, args.Pass())); 502 new GuestViewBase::Event(webview::kEventResponsive, args.Pass()));
503 } 503 }
504 504
505 void WebViewGuest::RendererUnresponsive(content::WebContents* source) { 505 void WebViewGuest::RendererUnresponsive(content::WebContents* source) {
506 scoped_ptr<base::DictionaryValue> args(new base::DictionaryValue()); 506 scoped_ptr<base::DictionaryValue> args(new base::DictionaryValue());
507 args->SetInteger(webview::kProcessId, 507 args->SetInteger(webview::kProcessId,
508 guest_web_contents()->GetRenderProcessHost()->GetID()); 508 web_contents()->GetRenderProcessHost()->GetID());
509 DispatchEventToEmbedder( 509 DispatchEventToEmbedder(
510 new GuestViewBase::Event(webview::kEventUnresponsive, args.Pass())); 510 new GuestViewBase::Event(webview::kEventUnresponsive, args.Pass()));
511 } 511 }
512 512
513 void WebViewGuest::Observe(int type, 513 void WebViewGuest::Observe(int type,
514 const content::NotificationSource& source, 514 const content::NotificationSource& source,
515 const content::NotificationDetails& details) { 515 const content::NotificationDetails& details) {
516 switch (type) { 516 switch (type) {
517 case content::NOTIFICATION_LOAD_COMPLETED_MAIN_FRAME: { 517 case content::NOTIFICATION_LOAD_COMPLETED_MAIN_FRAME: {
518 DCHECK_EQ(content::Source<WebContents>(source).ptr(), 518 DCHECK_EQ(content::Source<WebContents>(source).ptr(), web_contents());
519 guest_web_contents()); 519 if (content::Source<WebContents>(source).ptr() == web_contents())
520 if (content::Source<WebContents>(source).ptr() == guest_web_contents())
521 LoadHandlerCalled(); 520 LoadHandlerCalled();
522 break; 521 break;
523 } 522 }
524 case content::NOTIFICATION_RESOURCE_RECEIVED_REDIRECT: { 523 case content::NOTIFICATION_RESOURCE_RECEIVED_REDIRECT: {
525 DCHECK_EQ(content::Source<WebContents>(source).ptr(), 524 DCHECK_EQ(content::Source<WebContents>(source).ptr(), web_contents());
526 guest_web_contents());
527 content::ResourceRedirectDetails* resource_redirect_details = 525 content::ResourceRedirectDetails* resource_redirect_details =
528 content::Details<content::ResourceRedirectDetails>(details).ptr(); 526 content::Details<content::ResourceRedirectDetails>(details).ptr();
529 bool is_top_level = resource_redirect_details->resource_type == 527 bool is_top_level = resource_redirect_details->resource_type ==
530 content::RESOURCE_TYPE_MAIN_FRAME; 528 content::RESOURCE_TYPE_MAIN_FRAME;
531 LoadRedirect(resource_redirect_details->url, 529 LoadRedirect(resource_redirect_details->url,
532 resource_redirect_details->new_url, 530 resource_redirect_details->new_url,
533 is_top_level); 531 is_top_level);
534 break; 532 break;
535 } 533 }
536 default: 534 default:
(...skipping 15 matching lines...) Expand all
552 if (web_view_guest_delegate_) 550 if (web_view_guest_delegate_)
553 web_view_guest_delegate_->Find(search_text, options, find_function); 551 web_view_guest_delegate_->Find(search_text, options, find_function);
554 } 552 }
555 553
556 void WebViewGuest::StopFinding(content::StopFindAction action) { 554 void WebViewGuest::StopFinding(content::StopFindAction action) {
557 if (web_view_guest_delegate_) 555 if (web_view_guest_delegate_)
558 web_view_guest_delegate_->StopFinding(action); 556 web_view_guest_delegate_->StopFinding(action);
559 } 557 }
560 558
561 void WebViewGuest::Go(int relative_index) { 559 void WebViewGuest::Go(int relative_index) {
562 guest_web_contents()->GetController().GoToOffset(relative_index); 560 web_contents()->GetController().GoToOffset(relative_index);
563 } 561 }
564 562
565 void WebViewGuest::Reload() { 563 void WebViewGuest::Reload() {
566 // TODO(fsamuel): Don't check for repost because we don't want to show 564 // TODO(fsamuel): Don't check for repost because we don't want to show
567 // Chromium's repost warning. We might want to implement a separate API 565 // Chromium's repost warning. We might want to implement a separate API
568 // for registering a callback if a repost is about to happen. 566 // for registering a callback if a repost is about to happen.
569 guest_web_contents()->GetController().Reload(false); 567 web_contents()->GetController().Reload(false);
570 } 568 }
571 569
572 void WebViewGuest::SetUserAgentOverride( 570 void WebViewGuest::SetUserAgentOverride(
573 const std::string& user_agent_override) { 571 const std::string& user_agent_override) {
574 if (!attached()) 572 if (!attached())
575 return; 573 return;
576 is_overriding_user_agent_ = !user_agent_override.empty(); 574 is_overriding_user_agent_ = !user_agent_override.empty();
577 if (is_overriding_user_agent_) { 575 if (is_overriding_user_agent_) {
578 content::RecordAction(UserMetricsAction("WebView.Guest.OverrideUA")); 576 content::RecordAction(UserMetricsAction("WebView.Guest.OverrideUA"));
579 } 577 }
580 guest_web_contents()->SetUserAgentOverride(user_agent_override); 578 web_contents()->SetUserAgentOverride(user_agent_override);
581 } 579 }
582 580
583 void WebViewGuest::Stop() { 581 void WebViewGuest::Stop() {
584 guest_web_contents()->Stop(); 582 web_contents()->Stop();
585 } 583 }
586 584
587 void WebViewGuest::Terminate() { 585 void WebViewGuest::Terminate() {
588 content::RecordAction(UserMetricsAction("WebView.Guest.Terminate")); 586 content::RecordAction(UserMetricsAction("WebView.Guest.Terminate"));
589 base::ProcessHandle process_handle = 587 base::ProcessHandle process_handle =
590 guest_web_contents()->GetRenderProcessHost()->GetHandle(); 588 web_contents()->GetRenderProcessHost()->GetHandle();
591 if (process_handle) 589 if (process_handle)
592 base::KillProcess(process_handle, content::RESULT_CODE_KILLED, false); 590 base::KillProcess(process_handle, content::RESULT_CODE_KILLED, false);
593 } 591 }
594 592
595 bool WebViewGuest::ClearData(const base::Time remove_since, 593 bool WebViewGuest::ClearData(const base::Time remove_since,
596 uint32 removal_mask, 594 uint32 removal_mask,
597 const base::Closure& callback) { 595 const base::Closure& callback) {
598 content::RecordAction(UserMetricsAction("WebView.Guest.ClearData")); 596 content::RecordAction(UserMetricsAction("WebView.Guest.ClearData"));
599 content::StoragePartition* partition = 597 content::StoragePartition* partition =
600 content::BrowserContext::GetStoragePartition( 598 content::BrowserContext::GetStoragePartition(
601 guest_web_contents()->GetBrowserContext(), 599 web_contents()->GetBrowserContext(),
602 guest_web_contents()->GetSiteInstance()); 600 web_contents()->GetSiteInstance());
603 601
604 if (!partition) 602 if (!partition)
605 return false; 603 return false;
606 604
607 partition->ClearData( 605 partition->ClearData(
608 removal_mask, 606 removal_mask,
609 content::StoragePartition::QUOTA_MANAGED_STORAGE_MASK_ALL, 607 content::StoragePartition::QUOTA_MANAGED_STORAGE_MASK_ALL,
610 GURL(), 608 GURL(),
611 content::StoragePartition::OriginMatcherFunction(), 609 content::StoragePartition::OriginMatcherFunction(),
612 remove_since, 610 remove_since,
(...skipping 15 matching lines...) Expand all
628 } 626 }
629 627
630 void WebViewGuest::DidCommitProvisionalLoadForFrame( 628 void WebViewGuest::DidCommitProvisionalLoadForFrame(
631 content::RenderFrameHost* render_frame_host, 629 content::RenderFrameHost* render_frame_host,
632 const GURL& url, 630 const GURL& url,
633 content::PageTransition transition_type) { 631 content::PageTransition transition_type) {
634 scoped_ptr<base::DictionaryValue> args(new base::DictionaryValue()); 632 scoped_ptr<base::DictionaryValue> args(new base::DictionaryValue());
635 args->SetString(guestview::kUrl, url.spec()); 633 args->SetString(guestview::kUrl, url.spec());
636 args->SetBoolean(guestview::kIsTopLevel, !render_frame_host->GetParent()); 634 args->SetBoolean(guestview::kIsTopLevel, !render_frame_host->GetParent());
637 args->SetInteger(webview::kInternalCurrentEntryIndex, 635 args->SetInteger(webview::kInternalCurrentEntryIndex,
638 guest_web_contents()->GetController().GetCurrentEntryIndex()); 636 web_contents()->GetController().GetCurrentEntryIndex());
639 args->SetInteger(webview::kInternalEntryCount, 637 args->SetInteger(webview::kInternalEntryCount,
640 guest_web_contents()->GetController().GetEntryCount()); 638 web_contents()->GetController().GetEntryCount());
641 args->SetInteger(webview::kInternalProcessId, 639 args->SetInteger(webview::kInternalProcessId,
642 guest_web_contents()->GetRenderProcessHost()->GetID()); 640 web_contents()->GetRenderProcessHost()->GetID());
643 DispatchEventToEmbedder( 641 DispatchEventToEmbedder(
644 new GuestViewBase::Event(webview::kEventLoadCommit, args.Pass())); 642 new GuestViewBase::Event(webview::kEventLoadCommit, args.Pass()));
645 if (web_view_guest_delegate_) { 643 if (web_view_guest_delegate_) {
646 web_view_guest_delegate_->OnDidCommitProvisionalLoadForFrame( 644 web_view_guest_delegate_->OnDidCommitProvisionalLoadForFrame(
647 !render_frame_host->GetParent()); 645 !render_frame_host->GetParent());
648 } 646 }
649 } 647 }
650 648
651 void WebViewGuest::DidFailProvisionalLoad( 649 void WebViewGuest::DidFailProvisionalLoad(
652 content::RenderFrameHost* render_frame_host, 650 content::RenderFrameHost* render_frame_host,
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
684 IPC_END_MESSAGE_MAP() 682 IPC_END_MESSAGE_MAP()
685 return handled; 683 return handled;
686 } 684 }
687 685
688 void WebViewGuest::RenderProcessGone(base::TerminationStatus status) { 686 void WebViewGuest::RenderProcessGone(base::TerminationStatus status) {
689 if (web_view_guest_delegate_) 687 if (web_view_guest_delegate_)
690 web_view_guest_delegate_->OnRenderProcessGone(); 688 web_view_guest_delegate_->OnRenderProcessGone();
691 689
692 scoped_ptr<base::DictionaryValue> args(new base::DictionaryValue()); 690 scoped_ptr<base::DictionaryValue> args(new base::DictionaryValue());
693 args->SetInteger(webview::kProcessId, 691 args->SetInteger(webview::kProcessId,
694 guest_web_contents()->GetRenderProcessHost()->GetID()); 692 web_contents()->GetRenderProcessHost()->GetID());
695 args->SetString(webview::kReason, TerminationStatusToString(status)); 693 args->SetString(webview::kReason, TerminationStatusToString(status));
696 DispatchEventToEmbedder( 694 DispatchEventToEmbedder(
697 new GuestViewBase::Event(webview::kEventExit, args.Pass())); 695 new GuestViewBase::Event(webview::kEventExit, args.Pass()));
698 } 696 }
699 697
700 void WebViewGuest::UserAgentOverrideSet(const std::string& user_agent) { 698 void WebViewGuest::UserAgentOverrideSet(const std::string& user_agent) {
701 if (!attached()) 699 if (!attached())
702 return; 700 return;
703 content::NavigationController& controller = 701 content::NavigationController& controller = web_contents()->GetController();
704 guest_web_contents()->GetController();
705 content::NavigationEntry* entry = controller.GetVisibleEntry(); 702 content::NavigationEntry* entry = controller.GetVisibleEntry();
706 if (!entry) 703 if (!entry)
707 return; 704 return;
708 entry->SetIsOverridingUserAgent(!user_agent.empty()); 705 entry->SetIsOverridingUserAgent(!user_agent.empty());
709 guest_web_contents()->GetController().Reload(false); 706 web_contents()->GetController().Reload(false);
710 } 707 }
711 708
712 void WebViewGuest::ReportFrameNameChange(const std::string& name) { 709 void WebViewGuest::ReportFrameNameChange(const std::string& name) {
713 name_ = name; 710 name_ = name;
714 scoped_ptr<base::DictionaryValue> args(new base::DictionaryValue()); 711 scoped_ptr<base::DictionaryValue> args(new base::DictionaryValue());
715 args->SetString(webview::kName, name); 712 args->SetString(webview::kName, name);
716 DispatchEventToEmbedder( 713 DispatchEventToEmbedder(
717 new GuestViewBase::Event(webview::kEventFrameNameChanged, args.Pass())); 714 new GuestViewBase::Event(webview::kEventFrameNameChanged, args.Pass()));
718 } 715 }
719 716
720 void WebViewGuest::LoadHandlerCalled() { 717 void WebViewGuest::LoadHandlerCalled() {
721 scoped_ptr<base::DictionaryValue> args(new base::DictionaryValue()); 718 scoped_ptr<base::DictionaryValue> args(new base::DictionaryValue());
722 DispatchEventToEmbedder( 719 DispatchEventToEmbedder(
723 new GuestViewBase::Event(webview::kEventContentLoad, args.Pass())); 720 new GuestViewBase::Event(webview::kEventContentLoad, args.Pass()));
724 } 721 }
725 722
726 void WebViewGuest::LoadRedirect(const GURL& old_url, 723 void WebViewGuest::LoadRedirect(const GURL& old_url,
727 const GURL& new_url, 724 const GURL& new_url,
728 bool is_top_level) { 725 bool is_top_level) {
729 scoped_ptr<base::DictionaryValue> args(new base::DictionaryValue()); 726 scoped_ptr<base::DictionaryValue> args(new base::DictionaryValue());
730 args->SetBoolean(guestview::kIsTopLevel, is_top_level); 727 args->SetBoolean(guestview::kIsTopLevel, is_top_level);
731 args->SetString(webview::kNewURL, new_url.spec()); 728 args->SetString(webview::kNewURL, new_url.spec());
732 args->SetString(webview::kOldURL, old_url.spec()); 729 args->SetString(webview::kOldURL, old_url.spec());
733 DispatchEventToEmbedder( 730 DispatchEventToEmbedder(
734 new GuestViewBase::Event(webview::kEventLoadRedirect, args.Pass())); 731 new GuestViewBase::Event(webview::kEventLoadRedirect, args.Pass()));
735 } 732 }
736 733
737 void WebViewGuest::PushWebViewStateToIOThread() { 734 void WebViewGuest::PushWebViewStateToIOThread() {
738 const GURL& site_url = guest_web_contents()->GetSiteInstance()->GetSiteURL(); 735 const GURL& site_url = web_contents()->GetSiteInstance()->GetSiteURL();
739 std::string partition_domain; 736 std::string partition_domain;
740 std::string partition_id; 737 std::string partition_id;
741 bool in_memory; 738 bool in_memory;
742 if (!GetGuestPartitionConfigForSite( 739 if (!GetGuestPartitionConfigForSite(
743 site_url, &partition_domain, &partition_id, &in_memory)) { 740 site_url, &partition_domain, &partition_id, &in_memory)) {
744 NOTREACHED(); 741 NOTREACHED();
745 return; 742 return;
746 } 743 }
747 DCHECK(embedder_extension_id() == partition_domain); 744 DCHECK(embedder_extension_id() == partition_domain);
748 745
749 WebViewRendererState::WebViewInfo web_view_info; 746 WebViewRendererState::WebViewInfo web_view_info;
750 web_view_info.embedder_process_id = embedder_render_process_id(); 747 web_view_info.embedder_process_id = embedder_render_process_id();
751 web_view_info.instance_id = view_instance_id(); 748 web_view_info.instance_id = view_instance_id();
752 web_view_info.partition_id = partition_id; 749 web_view_info.partition_id = partition_id;
753 web_view_info.embedder_extension_id = embedder_extension_id(); 750 web_view_info.embedder_extension_id = embedder_extension_id();
754 751
755 content::BrowserThread::PostTask( 752 content::BrowserThread::PostTask(
756 content::BrowserThread::IO, 753 content::BrowserThread::IO,
757 FROM_HERE, 754 FROM_HERE,
758 base::Bind(&WebViewRendererState::AddGuest, 755 base::Bind(&WebViewRendererState::AddGuest,
759 base::Unretained(WebViewRendererState::GetInstance()), 756 base::Unretained(WebViewRendererState::GetInstance()),
760 guest_web_contents()->GetRenderProcessHost()->GetID(), 757 web_contents()->GetRenderProcessHost()->GetID(),
761 guest_web_contents()->GetRoutingID(), 758 web_contents()->GetRoutingID(),
762 web_view_info)); 759 web_view_info));
763 } 760 }
764 761
765 // static 762 // static
766 void WebViewGuest::RemoveWebViewStateFromIOThread( 763 void WebViewGuest::RemoveWebViewStateFromIOThread(
767 WebContents* web_contents) { 764 WebContents* web_contents) {
768 content::BrowserThread::PostTask( 765 content::BrowserThread::PostTask(
769 content::BrowserThread::IO, FROM_HERE, 766 content::BrowserThread::IO, FROM_HERE,
770 base::Bind( 767 base::Bind(
771 &WebViewRendererState::RemoveGuest, 768 &WebViewRendererState::RemoveGuest,
(...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after
856 url.scheme()) && 853 url.scheme()) &&
857 !url.SchemeIs(url::kAboutScheme)) || 854 !url.SchemeIs(url::kAboutScheme)) ||
858 url.SchemeIs(url::kJavaScriptScheme); 855 url.SchemeIs(url::kJavaScriptScheme);
859 if (scheme_is_blocked || !url.is_valid()) { 856 if (scheme_is_blocked || !url.is_valid()) {
860 LoadAbort(true /* is_top_level */, url, 857 LoadAbort(true /* is_top_level */, url,
861 net::ErrorToShortString(net::ERR_ABORTED)); 858 net::ErrorToShortString(net::ERR_ABORTED));
862 return; 859 return;
863 } 860 }
864 861
865 GURL validated_url(url); 862 GURL validated_url(url);
866 guest_web_contents()->GetRenderProcessHost()-> 863 web_contents()->GetRenderProcessHost()->FilterURL(false, &validated_url);
867 FilterURL(false, &validated_url);
868 // As guests do not swap processes on navigation, only navigations to 864 // As guests do not swap processes on navigation, only navigations to
869 // normal web URLs are supported. No protocol handlers are installed for 865 // normal web URLs are supported. No protocol handlers are installed for
870 // other schemes (e.g., WebUI or extensions), and no permissions or bindings 866 // other schemes (e.g., WebUI or extensions), and no permissions or bindings
871 // can be granted to the guest process. 867 // can be granted to the guest process.
872 LoadURLWithParams(validated_url, 868 LoadURLWithParams(validated_url,
873 content::Referrer(), 869 content::Referrer(),
874 content::PAGE_TRANSITION_AUTO_TOPLEVEL, 870 content::PAGE_TRANSITION_AUTO_TOPLEVEL,
875 guest_web_contents()); 871 web_contents());
876 } 872 }
877 873
878 bool WebViewGuest::HandleKeyboardShortcuts( 874 bool WebViewGuest::HandleKeyboardShortcuts(
879 const content::NativeWebKeyboardEvent& event) { 875 const content::NativeWebKeyboardEvent& event) {
880 if (event.type != blink::WebInputEvent::RawKeyDown) 876 if (event.type != blink::WebInputEvent::RawKeyDown)
881 return false; 877 return false;
882 878
883 // If the user hits the escape key without any modifiers then unlock the 879 // If the user hits the escape key without any modifiers then unlock the
884 // mouse if necessary. 880 // mouse if necessary.
885 if ((event.windowsKeyCode == ui::VKEY_ESCAPE) && 881 if ((event.windowsKeyCode == ui::VKEY_ESCAPE) &&
886 !(event.modifiers & blink::WebInputEvent::InputModifiers)) { 882 !(event.modifiers & blink::WebInputEvent::InputModifiers)) {
887 return guest_web_contents()->GotResponseToLockMouseRequest(false); 883 return web_contents()->GotResponseToLockMouseRequest(false);
888 } 884 }
889 885
890 #if defined(OS_MACOSX) 886 #if defined(OS_MACOSX)
891 if (event.modifiers != blink::WebInputEvent::MetaKey) 887 if (event.modifiers != blink::WebInputEvent::MetaKey)
892 return false; 888 return false;
893 889
894 if (event.windowsKeyCode == ui::VKEY_OEM_4) { 890 if (event.windowsKeyCode == ui::VKEY_OEM_4) {
895 Go(-1); 891 Go(-1);
896 return true; 892 return true;
897 } 893 }
(...skipping 207 matching lines...) Expand 10 before | Expand all | Expand 10 after
1105 WebViewGuest* guest = 1101 WebViewGuest* guest =
1106 WebViewGuest::From(embedder_render_process_id(), new_window_instance_id); 1102 WebViewGuest::From(embedder_render_process_id(), new_window_instance_id);
1107 if (!guest) 1103 if (!guest)
1108 return; 1104 return;
1109 1105
1110 if (!allow) 1106 if (!allow)
1111 guest->Destroy(); 1107 guest->Destroy();
1112 } 1108 }
1113 1109
1114 } // namespace extensions 1110 } // namespace extensions
OLDNEW
« no previous file with comments | « extensions/browser/guest_view/guest_view_base.cc ('k') | extensions/browser/guest_view/web_view/web_view_permission_helper.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698