| 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/web_contents/web_contents_impl.h" | 5 #include "content/browser/web_contents/web_contents_impl.h" |
| 6 | 6 |
| 7 #include <utility> | 7 #include <utility> |
| 8 | 8 |
| 9 #include "base/command_line.h" | 9 #include "base/command_line.h" |
| 10 #include "base/debug/trace_event.h" | 10 #include "base/debug/trace_event.h" |
| (...skipping 324 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 335 WebContentsImpl::WebContentsImpl( | 335 WebContentsImpl::WebContentsImpl( |
| 336 BrowserContext* browser_context, | 336 BrowserContext* browser_context, |
| 337 WebContentsImpl* opener) | 337 WebContentsImpl* opener) |
| 338 : delegate_(NULL), | 338 : delegate_(NULL), |
| 339 controller_(this, browser_context), | 339 controller_(this, browser_context), |
| 340 render_view_host_delegate_view_(NULL), | 340 render_view_host_delegate_view_(NULL), |
| 341 opener_(opener), | 341 opener_(opener), |
| 342 #if defined(OS_WIN) && defined(USE_AURA) | 342 #if defined(OS_WIN) && defined(USE_AURA) |
| 343 accessible_parent_(NULL), | 343 accessible_parent_(NULL), |
| 344 #endif | 344 #endif |
| 345 render_manager_(this, this, this), | 345 frame_tree_(new Navigator(&controller_, this), this, this, this), |
| 346 frame_tree_(new Navigator(&controller_, this)), | |
| 347 is_loading_(false), | 346 is_loading_(false), |
| 348 crashed_status_(base::TERMINATION_STATUS_STILL_RUNNING), | 347 crashed_status_(base::TERMINATION_STATUS_STILL_RUNNING), |
| 349 crashed_error_code_(0), | 348 crashed_error_code_(0), |
| 350 waiting_for_response_(false), | 349 waiting_for_response_(false), |
| 351 load_state_(net::LOAD_STATE_IDLE, string16()), | 350 load_state_(net::LOAD_STATE_IDLE, string16()), |
| 352 upload_size_(0), | 351 upload_size_(0), |
| 353 upload_position_(0), | 352 upload_position_(0), |
| 354 displayed_insecure_content_(false), | 353 displayed_insecure_content_(false), |
| 355 capturer_count_(0), | 354 capturer_count_(0), |
| 356 should_normally_be_visible_(true), | 355 should_normally_be_visible_(true), |
| (...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 402 #if defined(OS_WIN) && !defined(USE_AURA) | 401 #if defined(OS_WIN) && !defined(USE_AURA) |
| 403 // If we still have a window handle, destroy it. GetNativeView can return | 402 // If we still have a window handle, destroy it. GetNativeView can return |
| 404 // NULL if this contents was part of a window that closed. | 403 // NULL if this contents was part of a window that closed. |
| 405 if (view_->GetNativeView()) { | 404 if (view_->GetNativeView()) { |
| 406 RenderViewHost* host = GetRenderViewHost(); | 405 RenderViewHost* host = GetRenderViewHost(); |
| 407 if (host && host->GetView()) | 406 if (host && host->GetView()) |
| 408 RenderWidgetHostViewPort::FromRWHV(host->GetView())->WillWmDestroy(); | 407 RenderWidgetHostViewPort::FromRWHV(host->GetView())->WillWmDestroy(); |
| 409 } | 408 } |
| 410 #endif | 409 #endif |
| 411 | 410 |
| 412 RenderViewHost* pending_rvh = render_manager_.pending_render_view_host(); | 411 RenderViewHost* pending_rvh = GetRenderManager()->pending_render_view_host(); |
| 413 if (pending_rvh) { | 412 if (pending_rvh) { |
| 414 FOR_EACH_OBSERVER(WebContentsObserver, | 413 FOR_EACH_OBSERVER(WebContentsObserver, |
| 415 observers_, | 414 observers_, |
| 416 RenderViewDeleted(pending_rvh)); | 415 RenderViewDeleted(pending_rvh)); |
| 417 } | 416 } |
| 418 | 417 |
| 419 FOR_EACH_OBSERVER(WebContentsObserver, | 418 FOR_EACH_OBSERVER(WebContentsObserver, |
| 420 observers_, | 419 observers_, |
| 421 RenderViewDeleted(render_manager_.current_host())); | 420 RenderViewDeleted(GetRenderManager()->current_host())); |
| 422 | 421 |
| 423 FOR_EACH_OBSERVER(WebContentsObserver, | 422 FOR_EACH_OBSERVER(WebContentsObserver, |
| 424 observers_, | 423 observers_, |
| 425 WebContentsImplDestroyed()); | 424 WebContentsImplDestroyed()); |
| 426 | 425 |
| 427 SetDelegate(NULL); | 426 SetDelegate(NULL); |
| 428 | 427 |
| 429 STLDeleteContainerPairSecondPointers(destruction_observers_.begin(), | 428 STLDeleteContainerPairSecondPointers(destruction_observers_.begin(), |
| 430 destruction_observers_.end()); | 429 destruction_observers_.end()); |
| 431 } | 430 } |
| (...skipping 27 matching lines...) Expand all Loading... |
| 459 | 458 |
| 460 // We are instantiating a WebContents for browser plugin. Set its subframe bit | 459 // We are instantiating a WebContents for browser plugin. Set its subframe bit |
| 461 // to true. | 460 // to true. |
| 462 static_cast<RenderViewHostImpl*>( | 461 static_cast<RenderViewHostImpl*>( |
| 463 new_contents->GetRenderViewHost())->set_is_subframe(true); | 462 new_contents->GetRenderViewHost())->set_is_subframe(true); |
| 464 | 463 |
| 465 return new_contents->browser_plugin_guest_.get(); | 464 return new_contents->browser_plugin_guest_.get(); |
| 466 } | 465 } |
| 467 | 466 |
| 468 RenderViewHostManager* WebContentsImpl::GetRenderManagerForTesting() { | 467 RenderViewHostManager* WebContentsImpl::GetRenderManagerForTesting() { |
| 469 return &render_manager_; | 468 return GetRenderManager(); |
| 470 } | 469 } |
| 471 | 470 |
| 472 bool WebContentsImpl::OnMessageReceived(RenderViewHost* render_view_host, | 471 bool WebContentsImpl::OnMessageReceived(RenderViewHost* render_view_host, |
| 473 const IPC::Message& message) { | 472 const IPC::Message& message) { |
| 474 if (GetWebUI() && | 473 if (GetWebUI() && |
| 475 static_cast<WebUIImpl*>(GetWebUI())->OnMessageReceived(message)) { | 474 static_cast<WebUIImpl*>(GetWebUI())->OnMessageReceived(message)) { |
| 476 return true; | 475 return true; |
| 477 } | 476 } |
| 478 | 477 |
| 479 ObserverListBase<WebContentsObserver>::Iterator it(observers_); | 478 ObserverListBase<WebContentsObserver>::Iterator it(observers_); |
| (...skipping 115 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 595 delegate_ = delegate; | 594 delegate_ = delegate; |
| 596 if (delegate_) { | 595 if (delegate_) { |
| 597 delegate_->Attach(this); | 596 delegate_->Attach(this); |
| 598 // Ensure the visible RVH reflects the new delegate's preferences. | 597 // Ensure the visible RVH reflects the new delegate's preferences. |
| 599 if (view_) | 598 if (view_) |
| 600 view_->SetOverscrollControllerEnabled(delegate->CanOverscrollContent()); | 599 view_->SetOverscrollControllerEnabled(delegate->CanOverscrollContent()); |
| 601 } | 600 } |
| 602 } | 601 } |
| 603 | 602 |
| 604 RenderProcessHost* WebContentsImpl::GetRenderProcessHost() const { | 603 RenderProcessHost* WebContentsImpl::GetRenderProcessHost() const { |
| 605 RenderViewHostImpl* host = render_manager_.current_host(); | 604 RenderViewHostImpl* host = GetRenderManager()->current_host(); |
| 606 return host ? host->GetProcess() : NULL; | 605 return host ? host->GetProcess() : NULL; |
| 607 } | 606 } |
| 608 | 607 |
| 609 RenderViewHost* WebContentsImpl::GetRenderViewHost() const { | 608 RenderViewHost* WebContentsImpl::GetRenderViewHost() const { |
| 610 return render_manager_.current_host(); | 609 return GetRenderManager()->current_host(); |
| 611 } | 610 } |
| 612 | 611 |
| 613 void WebContentsImpl::GetRenderViewHostAtPosition( | 612 void WebContentsImpl::GetRenderViewHostAtPosition( |
| 614 int x, | 613 int x, |
| 615 int y, | 614 int y, |
| 616 const base::Callback<void(RenderViewHost*, int, int)>& callback) { | 615 const base::Callback<void(RenderViewHost*, int, int)>& callback) { |
| 617 BrowserPluginEmbedder* embedder = GetBrowserPluginEmbedder(); | 616 BrowserPluginEmbedder* embedder = GetBrowserPluginEmbedder(); |
| 618 if (embedder) | 617 if (embedder) |
| 619 embedder->GetRenderViewHostAtPosition(x, y, callback); | 618 embedder->GetRenderViewHostAtPosition(x, y, callback); |
| 620 else | 619 else |
| (...skipping 19 matching lines...) Expand all Loading... |
| 640 return MSG_ROUTING_NONE; | 639 return MSG_ROUTING_NONE; |
| 641 | 640 |
| 642 return GetRenderViewHost()->GetRoutingID(); | 641 return GetRenderViewHost()->GetRoutingID(); |
| 643 } | 642 } |
| 644 | 643 |
| 645 int WebContentsImpl::GetFullscreenWidgetRoutingID() const { | 644 int WebContentsImpl::GetFullscreenWidgetRoutingID() const { |
| 646 return fullscreen_widget_routing_id_; | 645 return fullscreen_widget_routing_id_; |
| 647 } | 646 } |
| 648 | 647 |
| 649 RenderWidgetHostView* WebContentsImpl::GetRenderWidgetHostView() const { | 648 RenderWidgetHostView* WebContentsImpl::GetRenderWidgetHostView() const { |
| 650 return render_manager_.GetRenderWidgetHostView(); | 649 return GetRenderManager()->GetRenderWidgetHostView(); |
| 651 } | 650 } |
| 652 | 651 |
| 653 RenderWidgetHostViewPort* WebContentsImpl::GetRenderWidgetHostViewPort() const { | 652 RenderWidgetHostViewPort* WebContentsImpl::GetRenderWidgetHostViewPort() const { |
| 654 BrowserPluginGuest* guest = GetBrowserPluginGuest(); | 653 BrowserPluginGuest* guest = GetBrowserPluginGuest(); |
| 655 if (guest && guest->embedder_web_contents()) { | 654 if (guest && guest->embedder_web_contents()) { |
| 656 return guest->embedder_web_contents()->GetRenderWidgetHostViewPort(); | 655 return guest->embedder_web_contents()->GetRenderWidgetHostViewPort(); |
| 657 } | 656 } |
| 658 return RenderWidgetHostViewPort::FromRWHV(GetRenderWidgetHostView()); | 657 return RenderWidgetHostViewPort::FromRWHV(GetRenderWidgetHostView()); |
| 659 } | 658 } |
| 660 | 659 |
| (...skipping 17 matching lines...) Expand all Loading... |
| 678 web_ui->AddMessageHandler(new GenericHandler()); | 677 web_ui->AddMessageHandler(new GenericHandler()); |
| 679 web_ui->SetController(controller); | 678 web_ui->SetController(controller); |
| 680 return web_ui; | 679 return web_ui; |
| 681 } | 680 } |
| 682 | 681 |
| 683 delete web_ui; | 682 delete web_ui; |
| 684 return NULL; | 683 return NULL; |
| 685 } | 684 } |
| 686 | 685 |
| 687 WebUI* WebContentsImpl::GetWebUI() const { | 686 WebUI* WebContentsImpl::GetWebUI() const { |
| 688 return render_manager_.web_ui() ? render_manager_.web_ui() | 687 return GetRenderManager()->web_ui() ? GetRenderManager()->web_ui() |
| 689 : render_manager_.pending_web_ui(); | 688 : GetRenderManager()->pending_web_ui(); |
| 690 } | 689 } |
| 691 | 690 |
| 692 WebUI* WebContentsImpl::GetCommittedWebUI() const { | 691 WebUI* WebContentsImpl::GetCommittedWebUI() const { |
| 693 return render_manager_.web_ui(); | 692 return GetRenderManager()->web_ui(); |
| 694 } | 693 } |
| 695 | 694 |
| 696 void WebContentsImpl::SetUserAgentOverride(const std::string& override) { | 695 void WebContentsImpl::SetUserAgentOverride(const std::string& override) { |
| 697 if (GetUserAgentOverride() == override) | 696 if (GetUserAgentOverride() == override) |
| 698 return; | 697 return; |
| 699 | 698 |
| 700 renderer_preferences_.user_agent_override = override; | 699 renderer_preferences_.user_agent_override = override; |
| 701 | 700 |
| 702 // Send the new override string to the renderer. | 701 // Send the new override string to the renderer. |
| 703 RenderViewHost* host = GetRenderViewHost(); | 702 RenderViewHost* host = GetRenderViewHost(); |
| (...skipping 26 matching lines...) Expand all Loading... |
| 730 const string16& WebContentsImpl::GetTitle() const { | 729 const string16& WebContentsImpl::GetTitle() const { |
| 731 // Transient entries take precedence. They are used for interstitial pages | 730 // Transient entries take precedence. They are used for interstitial pages |
| 732 // that are shown on top of existing pages. | 731 // that are shown on top of existing pages. |
| 733 NavigationEntry* entry = controller_.GetTransientEntry(); | 732 NavigationEntry* entry = controller_.GetTransientEntry(); |
| 734 std::string accept_languages = | 733 std::string accept_languages = |
| 735 GetContentClient()->browser()->GetAcceptLangs( | 734 GetContentClient()->browser()->GetAcceptLangs( |
| 736 GetBrowserContext()); | 735 GetBrowserContext()); |
| 737 if (entry) { | 736 if (entry) { |
| 738 return entry->GetTitleForDisplay(accept_languages); | 737 return entry->GetTitleForDisplay(accept_languages); |
| 739 } | 738 } |
| 740 WebUI* our_web_ui = render_manager_.pending_web_ui() ? | 739 WebUI* our_web_ui = GetRenderManager()->pending_web_ui() ? |
| 741 render_manager_.pending_web_ui() : render_manager_.web_ui(); | 740 GetRenderManager()->pending_web_ui() : GetRenderManager()->web_ui(); |
| 742 if (our_web_ui) { | 741 if (our_web_ui) { |
| 743 // Don't override the title in view source mode. | 742 // Don't override the title in view source mode. |
| 744 entry = controller_.GetVisibleEntry(); | 743 entry = controller_.GetVisibleEntry(); |
| 745 if (!(entry && entry->IsViewSourceMode())) { | 744 if (!(entry && entry->IsViewSourceMode())) { |
| 746 // Give the Web UI the chance to override our title. | 745 // Give the Web UI the chance to override our title. |
| 747 const string16& title = our_web_ui->GetOverriddenTitle(); | 746 const string16& title = our_web_ui->GetOverriddenTitle(); |
| 748 if (!title.empty()) | 747 if (!title.empty()) |
| 749 return title; | 748 return title; |
| 750 } | 749 } |
| 751 } | 750 } |
| (...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 792 if (GetMaxPageIDForSiteInstance(site_instance) < page_id) | 791 if (GetMaxPageIDForSiteInstance(site_instance) < page_id) |
| 793 max_page_ids_[site_instance->GetId()] = page_id; | 792 max_page_ids_[site_instance->GetId()] = page_id; |
| 794 } | 793 } |
| 795 | 794 |
| 796 void WebContentsImpl::CopyMaxPageIDsFrom(WebContents* web_contents) { | 795 void WebContentsImpl::CopyMaxPageIDsFrom(WebContents* web_contents) { |
| 797 WebContentsImpl* contents = static_cast<WebContentsImpl*>(web_contents); | 796 WebContentsImpl* contents = static_cast<WebContentsImpl*>(web_contents); |
| 798 max_page_ids_ = contents->max_page_ids_; | 797 max_page_ids_ = contents->max_page_ids_; |
| 799 } | 798 } |
| 800 | 799 |
| 801 SiteInstance* WebContentsImpl::GetSiteInstance() const { | 800 SiteInstance* WebContentsImpl::GetSiteInstance() const { |
| 802 return render_manager_.current_host()->GetSiteInstance(); | 801 return GetRenderManager()->current_host()->GetSiteInstance(); |
| 803 } | 802 } |
| 804 | 803 |
| 805 SiteInstance* WebContentsImpl::GetPendingSiteInstance() const { | 804 SiteInstance* WebContentsImpl::GetPendingSiteInstance() const { |
| 806 RenderViewHost* dest_rvh = render_manager_.pending_render_view_host() ? | 805 RenderViewHost* dest_rvh = GetRenderManager()->pending_render_view_host() ? |
| 807 render_manager_.pending_render_view_host() : | 806 GetRenderManager()->pending_render_view_host() : |
| 808 render_manager_.current_host(); | 807 GetRenderManager()->current_host(); |
| 809 return dest_rvh->GetSiteInstance(); | 808 return dest_rvh->GetSiteInstance(); |
| 810 } | 809 } |
| 811 | 810 |
| 812 bool WebContentsImpl::IsLoading() const { | 811 bool WebContentsImpl::IsLoading() const { |
| 813 return is_loading_; | 812 return is_loading_; |
| 814 } | 813 } |
| 815 | 814 |
| 816 bool WebContentsImpl::IsWaitingForResponse() const { | 815 bool WebContentsImpl::IsWaitingForResponse() const { |
| 817 return waiting_for_response_; | 816 return waiting_for_response_; |
| 818 } | 817 } |
| (...skipping 138 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 957 | 956 |
| 958 bool WebContentsImpl::NeedToFireBeforeUnload() { | 957 bool WebContentsImpl::NeedToFireBeforeUnload() { |
| 959 // TODO(creis): Should we fire even for interstitial pages? | 958 // TODO(creis): Should we fire even for interstitial pages? |
| 960 return WillNotifyDisconnection() && | 959 return WillNotifyDisconnection() && |
| 961 !ShowingInterstitialPage() && | 960 !ShowingInterstitialPage() && |
| 962 !static_cast<RenderViewHostImpl*>( | 961 !static_cast<RenderViewHostImpl*>( |
| 963 GetRenderViewHost())->SuddenTerminationAllowed(); | 962 GetRenderViewHost())->SuddenTerminationAllowed(); |
| 964 } | 963 } |
| 965 | 964 |
| 966 void WebContentsImpl::Stop() { | 965 void WebContentsImpl::Stop() { |
| 967 render_manager_.Stop(); | 966 GetRenderManager()->Stop(); |
| 968 FOR_EACH_OBSERVER(WebContentsObserver, observers_, NavigationStopped()); | 967 FOR_EACH_OBSERVER(WebContentsObserver, observers_, NavigationStopped()); |
| 969 } | 968 } |
| 970 | 969 |
| 971 WebContents* WebContentsImpl::Clone() { | 970 WebContents* WebContentsImpl::Clone() { |
| 972 // We use our current SiteInstance since the cloned entry will use it anyway. | 971 // We use our current SiteInstance since the cloned entry will use it anyway. |
| 973 // We pass our own opener so that the cloned page can access it if it was | 972 // We pass our own opener so that the cloned page can access it if it was |
| 974 // before. | 973 // before. |
| 975 CreateParams create_params(GetBrowserContext(), GetSiteInstance()); | 974 CreateParams create_params(GetBrowserContext(), GetSiteInstance()); |
| 976 create_params.initial_size = view_->GetContainerSize(); | 975 create_params.initial_size = view_->GetContainerSize(); |
| 977 WebContentsImpl* tc = CreateWithOpener(create_params, opener_); | 976 WebContentsImpl* tc = CreateWithOpener(create_params, opener_); |
| (...skipping 22 matching lines...) Expand all Loading... |
| 1000 default: | 999 default: |
| 1001 NOTREACHED(); | 1000 NOTREACHED(); |
| 1002 } | 1001 } |
| 1003 } | 1002 } |
| 1004 | 1003 |
| 1005 WebContents* WebContentsImpl::GetWebContents() { | 1004 WebContents* WebContentsImpl::GetWebContents() { |
| 1006 return this; | 1005 return this; |
| 1007 } | 1006 } |
| 1008 | 1007 |
| 1009 void WebContentsImpl::Init(const WebContents::CreateParams& params) { | 1008 void WebContentsImpl::Init(const WebContents::CreateParams& params) { |
| 1010 // This is set before initializing the render_manager_ since render_manager_ | 1009 // This is set before initializing the render manager since |
| 1011 // init calls back into us via its delegate to ask if it should be hidden. | 1010 // RenderViewHostManager::Init calls back into us via its delegate to ask if |
| 1011 // it should be hidden. |
| 1012 should_normally_be_visible_ = !params.initially_hidden; | 1012 should_normally_be_visible_ = !params.initially_hidden; |
| 1013 | 1013 |
| 1014 render_manager_.Init( | 1014 GetRenderManager()->Init( |
| 1015 params.browser_context, params.site_instance, params.routing_id, | 1015 params.browser_context, params.site_instance, params.routing_id, |
| 1016 params.main_frame_routing_id); | 1016 params.main_frame_routing_id); |
| 1017 | 1017 |
| 1018 view_.reset(GetContentClient()->browser()-> | 1018 view_.reset(GetContentClient()->browser()-> |
| 1019 OverrideCreateWebContentsView(this, &render_view_host_delegate_view_)); | 1019 OverrideCreateWebContentsView(this, &render_view_host_delegate_view_)); |
| 1020 if (view_) { | 1020 if (view_) { |
| 1021 CHECK(render_view_host_delegate_view_); | 1021 CHECK(render_view_host_delegate_view_); |
| 1022 } else { | 1022 } else { |
| 1023 WebContentsViewDelegate* delegate = | 1023 WebContentsViewDelegate* delegate = |
| 1024 GetContentClient()->browser()->GetWebContentsViewDelegate(this); | 1024 GetContentClient()->browser()->GetWebContentsViewDelegate(this); |
| (...skipping 546 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1571 | 1571 |
| 1572 void WebContentsImpl::RenderViewForInterstitialPageCreated( | 1572 void WebContentsImpl::RenderViewForInterstitialPageCreated( |
| 1573 RenderViewHost* render_view_host) { | 1573 RenderViewHost* render_view_host) { |
| 1574 FOR_EACH_OBSERVER(WebContentsObserver, observers_, | 1574 FOR_EACH_OBSERVER(WebContentsObserver, observers_, |
| 1575 RenderViewForInterstitialPageCreated(render_view_host)); | 1575 RenderViewForInterstitialPageCreated(render_view_host)); |
| 1576 } | 1576 } |
| 1577 | 1577 |
| 1578 void WebContentsImpl::AttachInterstitialPage( | 1578 void WebContentsImpl::AttachInterstitialPage( |
| 1579 InterstitialPageImpl* interstitial_page) { | 1579 InterstitialPageImpl* interstitial_page) { |
| 1580 DCHECK(interstitial_page); | 1580 DCHECK(interstitial_page); |
| 1581 render_manager_.set_interstitial_page(interstitial_page); | 1581 GetRenderManager()->set_interstitial_page(interstitial_page); |
| 1582 | 1582 |
| 1583 // Cancel any visible dialogs so that they don't interfere with the | 1583 // Cancel any visible dialogs so that they don't interfere with the |
| 1584 // interstitial. | 1584 // interstitial. |
| 1585 if (dialog_manager_) | 1585 if (dialog_manager_) |
| 1586 dialog_manager_->CancelActiveAndPendingDialogs(this); | 1586 dialog_manager_->CancelActiveAndPendingDialogs(this); |
| 1587 | 1587 |
| 1588 FOR_EACH_OBSERVER(WebContentsObserver, observers_, | 1588 FOR_EACH_OBSERVER(WebContentsObserver, observers_, |
| 1589 DidAttachInterstitialPage()); | 1589 DidAttachInterstitialPage()); |
| 1590 } | 1590 } |
| 1591 | 1591 |
| 1592 void WebContentsImpl::DetachInterstitialPage() { | 1592 void WebContentsImpl::DetachInterstitialPage() { |
| 1593 if (GetInterstitialPage()) | 1593 if (GetInterstitialPage()) |
| 1594 render_manager_.remove_interstitial_page(); | 1594 GetRenderManager()->remove_interstitial_page(); |
| 1595 FOR_EACH_OBSERVER(WebContentsObserver, observers_, | 1595 FOR_EACH_OBSERVER(WebContentsObserver, observers_, |
| 1596 DidDetachInterstitialPage()); | 1596 DidDetachInterstitialPage()); |
| 1597 } | 1597 } |
| 1598 | 1598 |
| 1599 bool WebContentsImpl::NavigateToEntry( | 1599 bool WebContentsImpl::NavigateToEntry( |
| 1600 const NavigationEntryImpl& entry, | 1600 const NavigationEntryImpl& entry, |
| 1601 NavigationController::ReloadType reload_type) { | 1601 NavigationController::ReloadType reload_type) { |
| 1602 TRACE_EVENT0("browser", "WebContentsImpl::NavigateToEntry"); | 1602 TRACE_EVENT0("browser", "WebContentsImpl::NavigateToEntry"); |
| 1603 | 1603 |
| 1604 // The renderer will reject IPC messages with URLs longer than | 1604 // The renderer will reject IPC messages with URLs longer than |
| 1605 // this limit, so don't attempt to navigate with a longer URL. | 1605 // this limit, so don't attempt to navigate with a longer URL. |
| 1606 if (entry.GetURL().spec().size() > kMaxURLChars) { | 1606 if (entry.GetURL().spec().size() > kMaxURLChars) { |
| 1607 LOG(WARNING) << "Refusing to load URL as it exceeds " << kMaxURLChars | 1607 LOG(WARNING) << "Refusing to load URL as it exceeds " << kMaxURLChars |
| 1608 << " characters."; | 1608 << " characters."; |
| 1609 return false; | 1609 return false; |
| 1610 } | 1610 } |
| 1611 | 1611 |
| 1612 RenderViewHostImpl* dest_render_view_host = | 1612 RenderViewHostImpl* dest_render_view_host = |
| 1613 static_cast<RenderViewHostImpl*>(render_manager_.Navigate(entry)); | 1613 static_cast<RenderViewHostImpl*>(GetRenderManager()->Navigate(entry)); |
| 1614 if (!dest_render_view_host) | 1614 if (!dest_render_view_host) |
| 1615 return false; // Unable to create the desired render view host. | 1615 return false; // Unable to create the desired render view host. |
| 1616 | 1616 |
| 1617 // For security, we should never send non-Web-UI URLs to a Web UI renderer. | 1617 // For security, we should never send non-Web-UI URLs to a Web UI renderer. |
| 1618 // Double check that here. | 1618 // Double check that here. |
| 1619 int enabled_bindings = dest_render_view_host->GetEnabledBindings(); | 1619 int enabled_bindings = dest_render_view_host->GetEnabledBindings(); |
| 1620 bool data_urls_allowed = delegate_ && delegate_->CanLoadDataURLsInWebUI(); | 1620 bool data_urls_allowed = delegate_ && delegate_->CanLoadDataURLsInWebUI(); |
| 1621 bool is_allowed_in_web_ui_renderer = | 1621 bool is_allowed_in_web_ui_renderer = |
| 1622 WebUIControllerFactoryRegistry::GetInstance()->IsURLAcceptableForWebUI( | 1622 WebUIControllerFactoryRegistry::GetInstance()->IsURLAcceptableForWebUI( |
| 1623 GetBrowserContext(), entry.GetURL(), data_urls_allowed); | 1623 GetBrowserContext(), entry.GetURL(), data_urls_allowed); |
| (...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1662 | 1662 |
| 1663 return true; | 1663 return true; |
| 1664 } | 1664 } |
| 1665 | 1665 |
| 1666 void WebContentsImpl::SetHistoryLengthAndPrune( | 1666 void WebContentsImpl::SetHistoryLengthAndPrune( |
| 1667 const SiteInstance* site_instance, | 1667 const SiteInstance* site_instance, |
| 1668 int history_length, | 1668 int history_length, |
| 1669 int32 minimum_page_id) { | 1669 int32 minimum_page_id) { |
| 1670 // SetHistoryLengthAndPrune doesn't work when there are pending cross-site | 1670 // SetHistoryLengthAndPrune doesn't work when there are pending cross-site |
| 1671 // navigations. Callers should ensure that this is the case. | 1671 // navigations. Callers should ensure that this is the case. |
| 1672 if (render_manager_.pending_render_view_host()) { | 1672 if (GetRenderManager()->pending_render_view_host()) { |
| 1673 NOTREACHED(); | 1673 NOTREACHED(); |
| 1674 return; | 1674 return; |
| 1675 } | 1675 } |
| 1676 RenderViewHostImpl* rvh = GetRenderViewHostImpl(); | 1676 RenderViewHostImpl* rvh = GetRenderViewHostImpl(); |
| 1677 if (!rvh) { | 1677 if (!rvh) { |
| 1678 NOTREACHED(); | 1678 NOTREACHED(); |
| 1679 return; | 1679 return; |
| 1680 } | 1680 } |
| 1681 if (site_instance && rvh->GetSiteInstance() != site_instance) { | 1681 if (site_instance && rvh->GetSiteInstance() != site_instance) { |
| 1682 NOTREACHED(); | 1682 NOTREACHED(); |
| 1683 return; | 1683 return; |
| 1684 } | 1684 } |
| 1685 Send(new ViewMsg_SetHistoryLengthAndPrune(GetRoutingID(), | 1685 Send(new ViewMsg_SetHistoryLengthAndPrune(GetRoutingID(), |
| 1686 history_length, | 1686 history_length, |
| 1687 minimum_page_id)); | 1687 minimum_page_id)); |
| 1688 } | 1688 } |
| 1689 | 1689 |
| 1690 void WebContentsImpl::FocusThroughTabTraversal(bool reverse) { | 1690 void WebContentsImpl::FocusThroughTabTraversal(bool reverse) { |
| 1691 if (ShowingInterstitialPage()) { | 1691 if (ShowingInterstitialPage()) { |
| 1692 render_manager_.interstitial_page()->FocusThroughTabTraversal(reverse); | 1692 GetRenderManager()->interstitial_page()->FocusThroughTabTraversal(reverse); |
| 1693 return; | 1693 return; |
| 1694 } | 1694 } |
| 1695 GetRenderViewHostImpl()->SetInitialFocus(reverse); | 1695 GetRenderViewHostImpl()->SetInitialFocus(reverse); |
| 1696 } | 1696 } |
| 1697 | 1697 |
| 1698 bool WebContentsImpl::ShowingInterstitialPage() const { | 1698 bool WebContentsImpl::ShowingInterstitialPage() const { |
| 1699 return render_manager_.interstitial_page() != NULL; | 1699 return GetRenderManager()->interstitial_page() != NULL; |
| 1700 } | 1700 } |
| 1701 | 1701 |
| 1702 InterstitialPage* WebContentsImpl::GetInterstitialPage() const { | 1702 InterstitialPage* WebContentsImpl::GetInterstitialPage() const { |
| 1703 return render_manager_.interstitial_page(); | 1703 return GetRenderManager()->interstitial_page(); |
| 1704 } | 1704 } |
| 1705 | 1705 |
| 1706 bool WebContentsImpl::IsSavable() { | 1706 bool WebContentsImpl::IsSavable() { |
| 1707 // WebKit creates Document object when MIME type is application/xhtml+xml, | 1707 // WebKit creates Document object when MIME type is application/xhtml+xml, |
| 1708 // so we also support this MIME type. | 1708 // so we also support this MIME type. |
| 1709 return contents_mime_type_ == "text/html" || | 1709 return contents_mime_type_ == "text/html" || |
| 1710 contents_mime_type_ == "text/xml" || | 1710 contents_mime_type_ == "text/xml" || |
| 1711 contents_mime_type_ == "application/xhtml+xml" || | 1711 contents_mime_type_ == "application/xhtml+xml" || |
| 1712 contents_mime_type_ == "text/plain" || | 1712 contents_mime_type_ == "text/plain" || |
| 1713 contents_mime_type_ == "text/css" || | 1713 contents_mime_type_ == "text/css" || |
| (...skipping 371 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2085 // Because this will not tear down the interstitial properly, if "back" is | 2085 // Because this will not tear down the interstitial properly, if "back" is |
| 2086 // back to another tab type, the interstitial will still be somewhat alive | 2086 // back to another tab type, the interstitial will still be somewhat alive |
| 2087 // in the previous tab type. If you navigate somewhere that activates the | 2087 // in the previous tab type. If you navigate somewhere that activates the |
| 2088 // tab with the interstitial again, you'll see a flash before the new load | 2088 // tab with the interstitial again, you'll see a flash before the new load |
| 2089 // commits of the interstitial page. | 2089 // commits of the interstitial page. |
| 2090 if (ShowingInterstitialPage()) { | 2090 if (ShowingInterstitialPage()) { |
| 2091 LOG(WARNING) << "Discarding message during interstitial."; | 2091 LOG(WARNING) << "Discarding message during interstitial."; |
| 2092 return; | 2092 return; |
| 2093 } | 2093 } |
| 2094 | 2094 |
| 2095 render_manager_.RendererAbortedProvisionalLoad(render_view_host); | 2095 GetRenderManager()->RendererAbortedProvisionalLoad(render_view_host); |
| 2096 } | 2096 } |
| 2097 | 2097 |
| 2098 // Do not usually clear the pending entry if one exists, so that the user's | 2098 // Do not usually clear the pending entry if one exists, so that the user's |
| 2099 // typed URL is not lost when a navigation fails or is aborted. However, in | 2099 // typed URL is not lost when a navigation fails or is aborted. However, in |
| 2100 // cases that we don't show the pending entry (e.g., renderer-initiated | 2100 // cases that we don't show the pending entry (e.g., renderer-initiated |
| 2101 // navigations in an existing tab), we don't keep it around. That prevents | 2101 // navigations in an existing tab), we don't keep it around. That prevents |
| 2102 // spoofs on in-page navigations that don't go through | 2102 // spoofs on in-page navigations that don't go through |
| 2103 // DidStartProvisionalLoadForFrame. | 2103 // DidStartProvisionalLoadForFrame. |
| 2104 // In general, we allow the view to clear the pending entry and typed URL if | 2104 // In general, we allow the view to clear the pending entry and typed URL if |
| 2105 // the user requests (e.g., hitting Escape with focus in the address bar). | 2105 // the user requests (e.g., hitting Escape with focus in the address bar). |
| (...skipping 386 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2492 if (is_loading == is_loading_) | 2492 if (is_loading == is_loading_) |
| 2493 return; | 2493 return; |
| 2494 | 2494 |
| 2495 if (!is_loading) { | 2495 if (!is_loading) { |
| 2496 load_state_ = net::LoadStateWithParam(net::LOAD_STATE_IDLE, string16()); | 2496 load_state_ = net::LoadStateWithParam(net::LOAD_STATE_IDLE, string16()); |
| 2497 load_state_host_.clear(); | 2497 load_state_host_.clear(); |
| 2498 upload_size_ = 0; | 2498 upload_size_ = 0; |
| 2499 upload_position_ = 0; | 2499 upload_position_ = 0; |
| 2500 } | 2500 } |
| 2501 | 2501 |
| 2502 render_manager_.SetIsLoading(is_loading); | 2502 GetRenderManager()->SetIsLoading(is_loading); |
| 2503 | 2503 |
| 2504 is_loading_ = is_loading; | 2504 is_loading_ = is_loading; |
| 2505 waiting_for_response_ = is_loading; | 2505 waiting_for_response_ = is_loading; |
| 2506 | 2506 |
| 2507 if (delegate_) | 2507 if (delegate_) |
| 2508 delegate_->LoadingStateChanged(this); | 2508 delegate_->LoadingStateChanged(this); |
| 2509 NotifyNavigationStateChanged(INVALIDATE_TYPE_LOAD); | 2509 NotifyNavigationStateChanged(INVALIDATE_TYPE_LOAD); |
| 2510 | 2510 |
| 2511 const char* url = | 2511 const char* url = |
| 2512 (details ? details->url.possibly_invalid_spec().c_str() : "NULL"); | 2512 (details ? details->url.possibly_invalid_spec().c_str() : "NULL"); |
| (...skipping 170 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2683 FOR_EACH_OBSERVER( | 2683 FOR_EACH_OBSERVER( |
| 2684 WebContentsObserver, observers_, NavigationEntryCommitted(load_details)); | 2684 WebContentsObserver, observers_, NavigationEntryCommitted(load_details)); |
| 2685 } | 2685 } |
| 2686 | 2686 |
| 2687 RenderViewHostDelegateView* WebContentsImpl::GetDelegateView() { | 2687 RenderViewHostDelegateView* WebContentsImpl::GetDelegateView() { |
| 2688 return render_view_host_delegate_view_; | 2688 return render_view_host_delegate_view_; |
| 2689 } | 2689 } |
| 2690 | 2690 |
| 2691 RenderViewHostDelegate::RendererManagement* | 2691 RenderViewHostDelegate::RendererManagement* |
| 2692 WebContentsImpl::GetRendererManagementDelegate() { | 2692 WebContentsImpl::GetRendererManagementDelegate() { |
| 2693 return &render_manager_; | 2693 return GetRenderManager(); |
| 2694 } | 2694 } |
| 2695 | 2695 |
| 2696 RendererPreferences WebContentsImpl::GetRendererPrefs( | 2696 RendererPreferences WebContentsImpl::GetRendererPrefs( |
| 2697 BrowserContext* browser_context) const { | 2697 BrowserContext* browser_context) const { |
| 2698 return renderer_preferences_; | 2698 return renderer_preferences_; |
| 2699 } | 2699 } |
| 2700 | 2700 |
| 2701 WebContents* WebContentsImpl::GetAsWebContents() { | 2701 WebContents* WebContentsImpl::GetAsWebContents() { |
| 2702 return this; | 2702 return this; |
| 2703 } | 2703 } |
| (...skipping 19 matching lines...) Expand all Loading... |
| 2723 if (delegate_) | 2723 if (delegate_) |
| 2724 view_->SetOverscrollControllerEnabled(delegate_->CanOverscrollContent()); | 2724 view_->SetOverscrollControllerEnabled(delegate_->CanOverscrollContent()); |
| 2725 | 2725 |
| 2726 NotificationService::current()->Notify( | 2726 NotificationService::current()->Notify( |
| 2727 NOTIFICATION_WEB_CONTENTS_RENDER_VIEW_HOST_CREATED, | 2727 NOTIFICATION_WEB_CONTENTS_RENDER_VIEW_HOST_CREATED, |
| 2728 Source<WebContents>(this), | 2728 Source<WebContents>(this), |
| 2729 Details<RenderViewHost>(render_view_host)); | 2729 Details<RenderViewHost>(render_view_host)); |
| 2730 | 2730 |
| 2731 // When we're creating views, we're still doing initial setup, so we always | 2731 // When we're creating views, we're still doing initial setup, so we always |
| 2732 // use the pending Web UI rather than any possibly existing committed one. | 2732 // use the pending Web UI rather than any possibly existing committed one. |
| 2733 if (render_manager_.pending_web_ui()) | 2733 if (GetRenderManager()->pending_web_ui()) |
| 2734 render_manager_.pending_web_ui()->RenderViewCreated(render_view_host); | 2734 GetRenderManager()->pending_web_ui()->RenderViewCreated(render_view_host); |
| 2735 | 2735 |
| 2736 NavigationEntry* entry = controller_.GetPendingEntry(); | 2736 NavigationEntry* entry = controller_.GetPendingEntry(); |
| 2737 if (entry && entry->IsViewSourceMode()) { | 2737 if (entry && entry->IsViewSourceMode()) { |
| 2738 // Put the renderer in view source mode. | 2738 // Put the renderer in view source mode. |
| 2739 render_view_host->Send( | 2739 render_view_host->Send( |
| 2740 new ViewMsg_EnableViewSourceMode(render_view_host->GetRoutingID())); | 2740 new ViewMsg_EnableViewSourceMode(render_view_host->GetRoutingID())); |
| 2741 } | 2741 } |
| 2742 | 2742 |
| 2743 view_->RenderViewCreated(render_view_host); | 2743 view_->RenderViewCreated(render_view_host); |
| 2744 | 2744 |
| (...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2787 SetIsCrashed(status, error_code); | 2787 SetIsCrashed(status, error_code); |
| 2788 GetView()->OnTabCrashed(GetCrashedStatus(), crashed_error_code_); | 2788 GetView()->OnTabCrashed(GetCrashedStatus(), crashed_error_code_); |
| 2789 | 2789 |
| 2790 FOR_EACH_OBSERVER(WebContentsObserver, | 2790 FOR_EACH_OBSERVER(WebContentsObserver, |
| 2791 observers_, | 2791 observers_, |
| 2792 RenderProcessGone(GetCrashedStatus())); | 2792 RenderProcessGone(GetCrashedStatus())); |
| 2793 } | 2793 } |
| 2794 | 2794 |
| 2795 void WebContentsImpl::RenderViewDeleted(RenderViewHost* rvh) { | 2795 void WebContentsImpl::RenderViewDeleted(RenderViewHost* rvh) { |
| 2796 ClearPowerSaveBlockers(rvh); | 2796 ClearPowerSaveBlockers(rvh); |
| 2797 render_manager_.RenderViewDeleted(rvh); | 2797 GetRenderManager()->RenderViewDeleted(rvh); |
| 2798 FOR_EACH_OBSERVER(WebContentsObserver, observers_, RenderViewDeleted(rvh)); | 2798 FOR_EACH_OBSERVER(WebContentsObserver, observers_, RenderViewDeleted(rvh)); |
| 2799 } | 2799 } |
| 2800 | 2800 |
| 2801 void WebContentsImpl::DidGetResourceResponseStart( | 2801 void WebContentsImpl::DidGetResourceResponseStart( |
| 2802 const ResourceRequestDetails& details) { | 2802 const ResourceRequestDetails& details) { |
| 2803 controller_.ssl_manager()->DidStartResourceResponse(details); | 2803 controller_.ssl_manager()->DidStartResourceResponse(details); |
| 2804 | 2804 |
| 2805 FOR_EACH_OBSERVER(WebContentsObserver, observers_, | 2805 FOR_EACH_OBSERVER(WebContentsObserver, observers_, |
| 2806 DidGetResourceResponseStart(details)); | 2806 DidGetResourceResponseStart(details)); |
| 2807 | 2807 |
| (...skipping 30 matching lines...) Expand all Loading... |
| 2838 if (PageTransitionIsMainFrame(params.transition)) { | 2838 if (PageTransitionIsMainFrame(params.transition)) { |
| 2839 // When overscroll navigation gesture is enabled, a screenshot of the page | 2839 // When overscroll navigation gesture is enabled, a screenshot of the page |
| 2840 // in its current state is taken so that it can be used during the | 2840 // in its current state is taken so that it can be used during the |
| 2841 // nav-gesture. It is necessary to take the screenshot here, before calling | 2841 // nav-gesture. It is necessary to take the screenshot here, before calling |
| 2842 // RenderViewHostManager::DidNavigateMainFrame, because that can change | 2842 // RenderViewHostManager::DidNavigateMainFrame, because that can change |
| 2843 // WebContents::GetRenderViewHost to return the new host, instead of the one | 2843 // WebContents::GetRenderViewHost to return the new host, instead of the one |
| 2844 // that may have just been swapped out. | 2844 // that may have just been swapped out. |
| 2845 if (delegate_ && delegate_->CanOverscrollContent()) | 2845 if (delegate_ && delegate_->CanOverscrollContent()) |
| 2846 controller_.TakeScreenshot(); | 2846 controller_.TakeScreenshot(); |
| 2847 | 2847 |
| 2848 render_manager_.DidNavigateMainFrame(rvh); | 2848 GetRenderManager()->DidNavigateMainFrame(rvh); |
| 2849 } | 2849 } |
| 2850 | 2850 |
| 2851 // Update the site of the SiteInstance if it doesn't have one yet, unless | 2851 // Update the site of the SiteInstance if it doesn't have one yet, unless |
| 2852 // assigning a site is not necessary for this URL. In that case, the | 2852 // assigning a site is not necessary for this URL. In that case, the |
| 2853 // SiteInstance can still be considered unused until a navigation to a real | 2853 // SiteInstance can still be considered unused until a navigation to a real |
| 2854 // page. | 2854 // page. |
| 2855 if (!static_cast<SiteInstanceImpl*>(GetSiteInstance())->HasSite() && | 2855 if (!static_cast<SiteInstanceImpl*>(GetSiteInstance())->HasSite() && |
| 2856 ShouldAssignSiteForURL(params.url)) { | 2856 ShouldAssignSiteForURL(params.url)) { |
| 2857 static_cast<SiteInstanceImpl*>(GetSiteInstance())->SetSite(params.url); | 2857 static_cast<SiteInstanceImpl*>(GetSiteInstance())->SetSite(params.url); |
| 2858 } | 2858 } |
| (...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2923 } | 2923 } |
| 2924 } | 2924 } |
| 2925 DidNavigateAnyFramePostCommit(rvh, details, params); | 2925 DidNavigateAnyFramePostCommit(rvh, details, params); |
| 2926 } | 2926 } |
| 2927 | 2927 |
| 2928 void WebContentsImpl::UpdateState(RenderViewHost* rvh, | 2928 void WebContentsImpl::UpdateState(RenderViewHost* rvh, |
| 2929 int32 page_id, | 2929 int32 page_id, |
| 2930 const PageState& page_state) { | 2930 const PageState& page_state) { |
| 2931 // Ensure that this state update comes from either the active RVH or one of | 2931 // Ensure that this state update comes from either the active RVH or one of |
| 2932 // the swapped out RVHs. We don't expect to hear from any other RVHs. | 2932 // the swapped out RVHs. We don't expect to hear from any other RVHs. |
| 2933 DCHECK(rvh == GetRenderViewHost() || render_manager_.IsOnSwappedOutList(rvh)); | 2933 DCHECK(rvh == GetRenderViewHost() || |
| 2934 GetRenderManager()->IsOnSwappedOutList(rvh)); |
| 2934 | 2935 |
| 2935 // We must be prepared to handle state updates for any page, these occur | 2936 // We must be prepared to handle state updates for any page, these occur |
| 2936 // when the user is scrolling and entering form data, as well as when we're | 2937 // when the user is scrolling and entering form data, as well as when we're |
| 2937 // leaving a page, in which case our state may have already been moved to | 2938 // leaving a page, in which case our state may have already been moved to |
| 2938 // the next page. The navigation controller will look up the appropriate | 2939 // the next page. The navigation controller will look up the appropriate |
| 2939 // NavigationEntry and update it when it is notified via the delegate. | 2940 // NavigationEntry and update it when it is notified via the delegate. |
| 2940 | 2941 |
| 2941 int entry_index = controller_.GetEntryIndexWithPageID( | 2942 int entry_index = controller_.GetEntryIndexWithPageID( |
| 2942 rvh->GetSiteInstance(), page_id); | 2943 rvh->GetSiteInstance(), page_id); |
| 2943 if (entry_index < 0) | 2944 if (entry_index < 0) |
| (...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3006 // Ignore this if it comes from a RenderViewHost that we aren't showing. | 3007 // Ignore this if it comes from a RenderViewHost that we aren't showing. |
| 3007 if (delegate_ && rvh == GetRenderViewHost()) | 3008 if (delegate_ && rvh == GetRenderViewHost()) |
| 3008 delegate_->CloseContents(this); | 3009 delegate_->CloseContents(this); |
| 3009 } | 3010 } |
| 3010 | 3011 |
| 3011 void WebContentsImpl::SwappedOut(RenderViewHost* rvh) { | 3012 void WebContentsImpl::SwappedOut(RenderViewHost* rvh) { |
| 3012 if (delegate_ && rvh == GetRenderViewHost()) | 3013 if (delegate_ && rvh == GetRenderViewHost()) |
| 3013 delegate_->SwappedOut(this); | 3014 delegate_->SwappedOut(this); |
| 3014 | 3015 |
| 3015 // Allow the navigation to proceed. | 3016 // Allow the navigation to proceed. |
| 3016 render_manager_.SwappedOut(rvh); | 3017 GetRenderManager()->SwappedOut(rvh); |
| 3017 } | 3018 } |
| 3018 | 3019 |
| 3019 void WebContentsImpl::RequestMove(const gfx::Rect& new_bounds) { | 3020 void WebContentsImpl::RequestMove(const gfx::Rect& new_bounds) { |
| 3020 if (delegate_ && delegate_->IsPopupOrPanel(this)) | 3021 if (delegate_ && delegate_->IsPopupOrPanel(this)) |
| 3021 delegate_->MoveContents(this, new_bounds); | 3022 delegate_->MoveContents(this, new_bounds); |
| 3022 } | 3023 } |
| 3023 | 3024 |
| 3024 void WebContentsImpl::DidStartLoading(RenderViewHost* render_view_host) { | 3025 void WebContentsImpl::DidStartLoading(RenderViewHost* render_view_host) { |
| 3025 SetIsLoading(render_view_host, true, NULL); | 3026 SetIsLoading(render_view_host, true, NULL); |
| 3026 } | 3027 } |
| (...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3064 if (opener_) { | 3065 if (opener_) { |
| 3065 // Clear our opener so that future cross-process navigations don't have an | 3066 // Clear our opener so that future cross-process navigations don't have an |
| 3066 // opener assigned. | 3067 // opener assigned. |
| 3067 RemoveDestructionObserver(opener_); | 3068 RemoveDestructionObserver(opener_); |
| 3068 opener_ = NULL; | 3069 opener_ = NULL; |
| 3069 } | 3070 } |
| 3070 | 3071 |
| 3071 // Notify all swapped out RenderViewHosts for this tab. This is important | 3072 // Notify all swapped out RenderViewHosts for this tab. This is important |
| 3072 // in case we go back to them, or if another window in those processes tries | 3073 // in case we go back to them, or if another window in those processes tries |
| 3073 // to access window.opener. | 3074 // to access window.opener. |
| 3074 render_manager_.DidDisownOpener(rvh); | 3075 GetRenderManager()->DidDisownOpener(rvh); |
| 3075 } | 3076 } |
| 3076 | 3077 |
| 3077 void WebContentsImpl::DidAccessInitialDocument() { | 3078 void WebContentsImpl::DidAccessInitialDocument() { |
| 3078 // Update the URL display. | 3079 // Update the URL display. |
| 3079 NotifyNavigationStateChanged(content::INVALIDATE_TYPE_URL); | 3080 NotifyNavigationStateChanged(content::INVALIDATE_TYPE_URL); |
| 3080 } | 3081 } |
| 3081 | 3082 |
| 3082 void WebContentsImpl::DocumentAvailableInMainFrame( | 3083 void WebContentsImpl::DocumentAvailableInMainFrame( |
| 3083 RenderViewHost* render_view_host) { | 3084 RenderViewHost* render_view_host) { |
| 3084 FOR_EACH_OBSERVER(WebContentsObserver, observers_, | 3085 FOR_EACH_OBSERVER(WebContentsObserver, observers_, |
| (...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3139 dest_url = GURL(kAboutBlankURL); | 3140 dest_url = GURL(kAboutBlankURL); |
| 3140 | 3141 |
| 3141 OpenURLParams params(dest_url, referrer, source_frame_id, disposition, | 3142 OpenURLParams params(dest_url, referrer, source_frame_id, disposition, |
| 3142 page_transition, true /* is_renderer_initiated */); | 3143 page_transition, true /* is_renderer_initiated */); |
| 3143 if (redirect_chain.size() > 0) | 3144 if (redirect_chain.size() > 0) |
| 3144 params.redirect_chain = redirect_chain; | 3145 params.redirect_chain = redirect_chain; |
| 3145 params.transferred_global_request_id = old_request_id; | 3146 params.transferred_global_request_id = old_request_id; |
| 3146 params.should_replace_current_entry = should_replace_current_entry; | 3147 params.should_replace_current_entry = should_replace_current_entry; |
| 3147 params.user_gesture = user_gesture; | 3148 params.user_gesture = user_gesture; |
| 3148 | 3149 |
| 3149 if (render_manager_.web_ui()) { | 3150 if (GetRenderManager()->web_ui()) { |
| 3150 // Web UI pages sometimes want to override the page transition type for | 3151 // Web UI pages sometimes want to override the page transition type for |
| 3151 // link clicks (e.g., so the new tab page can specify AUTO_BOOKMARK for | 3152 // link clicks (e.g., so the new tab page can specify AUTO_BOOKMARK for |
| 3152 // automatically generated suggestions). We don't override other types | 3153 // automatically generated suggestions). We don't override other types |
| 3153 // like TYPED because they have different implications (e.g., autocomplete). | 3154 // like TYPED because they have different implications (e.g., autocomplete). |
| 3154 if (PageTransitionCoreTypeIs(params.transition, PAGE_TRANSITION_LINK)) | 3155 if (PageTransitionCoreTypeIs(params.transition, PAGE_TRANSITION_LINK)) |
| 3155 params.transition = render_manager_.web_ui()->GetLinkTransitionType(); | 3156 params.transition = GetRenderManager()->web_ui()->GetLinkTransitionType(); |
| 3156 | 3157 |
| 3157 // Note also that we hide the referrer for Web UI pages. We don't really | 3158 // Note also that we hide the referrer for Web UI pages. We don't really |
| 3158 // want web sites to see a referrer of "chrome://blah" (and some | 3159 // want web sites to see a referrer of "chrome://blah" (and some |
| 3159 // chrome: URLs might have search terms or other stuff we don't want to | 3160 // chrome: URLs might have search terms or other stuff we don't want to |
| 3160 // send to the site), so we send no referrer. | 3161 // send to the site), so we send no referrer. |
| 3161 params.referrer = Referrer(); | 3162 params.referrer = Referrer(); |
| 3162 | 3163 |
| 3163 // Navigations in Web UI pages count as browser-initiated navigations. | 3164 // Navigations in Web UI pages count as browser-initiated navigations. |
| 3164 params.is_renderer_initiated = false; | 3165 params.is_renderer_initiated = false; |
| 3165 | 3166 |
| (...skipping 183 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3349 } | 3350 } |
| 3350 | 3351 |
| 3351 WebPreferences WebContentsImpl::GetWebkitPrefs() { | 3352 WebPreferences WebContentsImpl::GetWebkitPrefs() { |
| 3352 // We want to base the page config off of the actual URL, rather than the | 3353 // We want to base the page config off of the actual URL, rather than the |
| 3353 // virtual URL. | 3354 // virtual URL. |
| 3354 // TODO(nasko): Investigate how to remove the GetActiveEntry usage here, | 3355 // TODO(nasko): Investigate how to remove the GetActiveEntry usage here, |
| 3355 // as it is deprecated and can be out of sync with GetRenderViewHost(). | 3356 // as it is deprecated and can be out of sync with GetRenderViewHost(). |
| 3356 GURL url = controller_.GetActiveEntry() | 3357 GURL url = controller_.GetActiveEntry() |
| 3357 ? controller_.GetActiveEntry()->GetURL() : GURL::EmptyGURL(); | 3358 ? controller_.GetActiveEntry()->GetURL() : GURL::EmptyGURL(); |
| 3358 | 3359 |
| 3359 return render_manager_.current_host()->GetWebkitPrefs(url); | 3360 return GetRenderManager()->current_host()->GetWebkitPrefs(url); |
| 3360 } | 3361 } |
| 3361 | 3362 |
| 3362 int WebContentsImpl::CreateSwappedOutRenderView( | 3363 int WebContentsImpl::CreateSwappedOutRenderView( |
| 3363 SiteInstance* instance) { | 3364 SiteInstance* instance) { |
| 3364 return render_manager_.CreateRenderView(instance, MSG_ROUTING_NONE, | 3365 return GetRenderManager()->CreateRenderView(instance, MSG_ROUTING_NONE, |
| 3365 true, true); | 3366 true, true); |
| 3366 } | 3367 } |
| 3367 | 3368 |
| 3368 void WebContentsImpl::OnUserGesture() { | 3369 void WebContentsImpl::OnUserGesture() { |
| 3369 // Notify observers. | 3370 // Notify observers. |
| 3370 FOR_EACH_OBSERVER(WebContentsObserver, observers_, DidGetUserGesture()); | 3371 FOR_EACH_OBSERVER(WebContentsObserver, observers_, DidGetUserGesture()); |
| 3371 | 3372 |
| 3372 ResourceDispatcherHostImpl* rdh = ResourceDispatcherHostImpl::Get(); | 3373 ResourceDispatcherHostImpl* rdh = ResourceDispatcherHostImpl::Get(); |
| 3373 if (rdh) // NULL in unittests. | 3374 if (rdh) // NULL in unittests. |
| 3374 rdh->OnUserGesture(this); | 3375 rdh->OnUserGesture(this); |
| 3375 } | 3376 } |
| (...skipping 16 matching lines...) Expand all Loading... |
| 3392 // since the event may be a result of the renderer sitting on a breakpoint. | 3393 // since the event may be a result of the renderer sitting on a breakpoint. |
| 3393 // See http://crbug.com/65458 | 3394 // See http://crbug.com/65458 |
| 3394 if (DevToolsAgentHost::IsDebuggerAttached(this)) | 3395 if (DevToolsAgentHost::IsDebuggerAttached(this)) |
| 3395 return; | 3396 return; |
| 3396 | 3397 |
| 3397 if (is_during_beforeunload || is_during_unload) { | 3398 if (is_during_beforeunload || is_during_unload) { |
| 3398 // Hang occurred while firing the beforeunload/unload handler. | 3399 // Hang occurred while firing the beforeunload/unload handler. |
| 3399 // Pretend the handler fired so tab closing continues as if it had. | 3400 // Pretend the handler fired so tab closing continues as if it had. |
| 3400 rvhi->set_sudden_termination_allowed(true); | 3401 rvhi->set_sudden_termination_allowed(true); |
| 3401 | 3402 |
| 3402 if (!render_manager_.ShouldCloseTabOnUnresponsiveRenderer()) | 3403 if (!GetRenderManager()->ShouldCloseTabOnUnresponsiveRenderer()) |
| 3403 return; | 3404 return; |
| 3404 | 3405 |
| 3405 // If the tab hangs in the beforeunload/unload handler there's really | 3406 // If the tab hangs in the beforeunload/unload handler there's really |
| 3406 // nothing we can do to recover. If the hang is in the beforeunload handler, | 3407 // nothing we can do to recover. If the hang is in the beforeunload handler, |
| 3407 // pretend the beforeunload listeners have all fired and allow the delegate | 3408 // pretend the beforeunload listeners have all fired and allow the delegate |
| 3408 // to continue closing; the user will not have the option of cancelling the | 3409 // to continue closing; the user will not have the option of cancelling the |
| 3409 // close. Otherwise, pretend the unload listeners have all fired and close | 3410 // close. Otherwise, pretend the unload listeners have all fired and close |
| 3410 // the tab. | 3411 // the tab. |
| 3411 bool close = true; | 3412 bool close = true; |
| 3412 if (is_during_beforeunload) { | 3413 if (is_during_beforeunload) { |
| (...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3509 int WebContentsImpl::CreateOpenerRenderViews(SiteInstance* instance) { | 3510 int WebContentsImpl::CreateOpenerRenderViews(SiteInstance* instance) { |
| 3510 int opener_route_id = MSG_ROUTING_NONE; | 3511 int opener_route_id = MSG_ROUTING_NONE; |
| 3511 | 3512 |
| 3512 // If this tab has an opener, ensure it has a RenderView in the given | 3513 // If this tab has an opener, ensure it has a RenderView in the given |
| 3513 // SiteInstance as well. | 3514 // SiteInstance as well. |
| 3514 if (opener_) | 3515 if (opener_) |
| 3515 opener_route_id = opener_->CreateOpenerRenderViews(instance); | 3516 opener_route_id = opener_->CreateOpenerRenderViews(instance); |
| 3516 | 3517 |
| 3517 // If any of the renderers (current, pending, or swapped out) for this | 3518 // If any of the renderers (current, pending, or swapped out) for this |
| 3518 // WebContents has the same SiteInstance, use it. | 3519 // WebContents has the same SiteInstance, use it. |
| 3519 if (render_manager_.current_host()->GetSiteInstance() == instance) | 3520 if (GetRenderManager()->current_host()->GetSiteInstance() == instance) |
| 3520 return render_manager_.current_host()->GetRoutingID(); | 3521 return GetRenderManager()->current_host()->GetRoutingID(); |
| 3521 | 3522 |
| 3522 if (render_manager_.pending_render_view_host() && | 3523 if (GetRenderManager()->pending_render_view_host() && |
| 3523 render_manager_.pending_render_view_host()->GetSiteInstance() == instance) | 3524 GetRenderManager()->pending_render_view_host()->GetSiteInstance() == |
| 3524 return render_manager_.pending_render_view_host()->GetRoutingID(); | 3525 instance) |
| 3526 return GetRenderManager()->pending_render_view_host()->GetRoutingID(); |
| 3525 | 3527 |
| 3526 RenderViewHostImpl* rvh = render_manager_.GetSwappedOutRenderViewHost( | 3528 RenderViewHostImpl* rvh = GetRenderManager()->GetSwappedOutRenderViewHost( |
| 3527 instance); | 3529 instance); |
| 3528 if (rvh) | 3530 if (rvh) |
| 3529 return rvh->GetRoutingID(); | 3531 return rvh->GetRoutingID(); |
| 3530 | 3532 |
| 3531 // Create a swapped out RenderView in the given SiteInstance if none exists, | 3533 // Create a swapped out RenderView in the given SiteInstance if none exists, |
| 3532 // setting its opener to the given route_id. Return the new view's route_id. | 3534 // setting its opener to the given route_id. Return the new view's route_id. |
| 3533 return render_manager_.CreateRenderView(instance, opener_route_id, | 3535 return GetRenderManager()->CreateRenderView(instance, opener_route_id, |
| 3534 true, true); | 3536 true, true); |
| 3535 } | 3537 } |
| 3536 | 3538 |
| 3537 NavigationControllerImpl& WebContentsImpl::GetControllerForRenderManager() { | 3539 NavigationControllerImpl& WebContentsImpl::GetControllerForRenderManager() { |
| 3538 return GetController(); | 3540 return GetController(); |
| 3539 } | 3541 } |
| 3540 | 3542 |
| 3541 WebUIImpl* WebContentsImpl::CreateWebUIForRenderManager(const GURL& url) { | 3543 WebUIImpl* WebContentsImpl::CreateWebUIForRenderManager(const GURL& url) { |
| 3542 return static_cast<WebUIImpl*>(CreateWebUI(url)); | 3544 return static_cast<WebUIImpl*>(CreateWebUI(url)); |
| 3543 } | 3545 } |
| 3544 | 3546 |
| (...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3615 RenderWidgetHostView* rwh_view = view_->CreateViewForWidget(rvh); | 3617 RenderWidgetHostView* rwh_view = view_->CreateViewForWidget(rvh); |
| 3616 // Can be NULL during tests. | 3618 // Can be NULL during tests. |
| 3617 if (rwh_view) | 3619 if (rwh_view) |
| 3618 rwh_view->SetSize(GetView()->GetContainerSize()); | 3620 rwh_view->SetSize(GetView()->GetContainerSize()); |
| 3619 } | 3621 } |
| 3620 | 3622 |
| 3621 bool WebContentsImpl::IsHidden() { | 3623 bool WebContentsImpl::IsHidden() { |
| 3622 return capturer_count_ == 0 && !should_normally_be_visible_; | 3624 return capturer_count_ == 0 && !should_normally_be_visible_; |
| 3623 } | 3625 } |
| 3624 | 3626 |
| 3627 RenderViewHostManager* WebContentsImpl::GetRenderManager() const { |
| 3628 return frame_tree_.root()->render_manager(); |
| 3629 } |
| 3630 |
| 3625 RenderViewHostImpl* WebContentsImpl::GetRenderViewHostImpl() { | 3631 RenderViewHostImpl* WebContentsImpl::GetRenderViewHostImpl() { |
| 3626 return static_cast<RenderViewHostImpl*>(GetRenderViewHost()); | 3632 return static_cast<RenderViewHostImpl*>(GetRenderViewHost()); |
| 3627 } | 3633 } |
| 3628 | 3634 |
| 3629 BrowserPluginGuest* WebContentsImpl::GetBrowserPluginGuest() const { | 3635 BrowserPluginGuest* WebContentsImpl::GetBrowserPluginGuest() const { |
| 3630 return browser_plugin_guest_.get(); | 3636 return browser_plugin_guest_.get(); |
| 3631 } | 3637 } |
| 3632 | 3638 |
| 3633 void WebContentsImpl::SetBrowserPluginGuest(BrowserPluginGuest* guest) { | 3639 void WebContentsImpl::SetBrowserPluginGuest(BrowserPluginGuest* guest) { |
| 3634 CHECK(!browser_plugin_guest_); | 3640 CHECK(!browser_plugin_guest_); |
| (...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3669 } | 3675 } |
| 3670 | 3676 |
| 3671 void WebContentsImpl::OnFrameRemoved( | 3677 void WebContentsImpl::OnFrameRemoved( |
| 3672 RenderViewHostImpl* render_view_host, | 3678 RenderViewHostImpl* render_view_host, |
| 3673 int64 frame_id) { | 3679 int64 frame_id) { |
| 3674 FOR_EACH_OBSERVER(WebContentsObserver, observers_, | 3680 FOR_EACH_OBSERVER(WebContentsObserver, observers_, |
| 3675 FrameDetached(render_view_host, frame_id)); | 3681 FrameDetached(render_view_host, frame_id)); |
| 3676 } | 3682 } |
| 3677 | 3683 |
| 3678 } // namespace content | 3684 } // namespace content |
| OLD | NEW |