| 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/lazy_instance.h" | 10 #include "base/lazy_instance.h" |
| (...skipping 694 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 705 | 705 |
| 706 const NavigationControllerImpl& WebContentsImpl::GetController() const { | 706 const NavigationControllerImpl& WebContentsImpl::GetController() const { |
| 707 return controller_; | 707 return controller_; |
| 708 } | 708 } |
| 709 | 709 |
| 710 BrowserContext* WebContentsImpl::GetBrowserContext() const { | 710 BrowserContext* WebContentsImpl::GetBrowserContext() const { |
| 711 return controller_.GetBrowserContext(); | 711 return controller_.GetBrowserContext(); |
| 712 } | 712 } |
| 713 | 713 |
| 714 const GURL& WebContentsImpl::GetURL() const { | 714 const GURL& WebContentsImpl::GetURL() const { |
| 715 // We may not have a navigation entry yet. | 715 return controller_.GetVisibleEntry()->GetVirtualURL(); |
| 716 NavigationEntry* entry = controller_.GetVisibleEntry(); | |
| 717 return entry ? entry->GetVirtualURL() : GURL::EmptyGURL(); | |
| 718 } | 716 } |
| 719 | 717 |
| 720 const GURL& WebContentsImpl::GetVisibleURL() const { | 718 const GURL& WebContentsImpl::GetVisibleURL() const { |
| 721 // We may not have a navigation entry yet. | 719 return controller_.GetVisibleEntry()->GetVirtualURL(); |
| 722 NavigationEntry* entry = controller_.GetVisibleEntry(); | |
| 723 return entry ? entry->GetVirtualURL() : GURL::EmptyGURL(); | |
| 724 } | 720 } |
| 725 | 721 |
| 726 const GURL& WebContentsImpl::GetLastCommittedURL() const { | 722 const GURL& WebContentsImpl::GetLastCommittedURL() const { |
| 727 // We may not have a navigation entry yet. | 723 return controller_.GetLastCommittedEntry()->GetVirtualURL(); |
| 728 NavigationEntry* entry = controller_.GetLastCommittedEntry(); | |
| 729 return entry ? entry->GetVirtualURL() : GURL::EmptyGURL(); | |
| 730 } | 724 } |
| 731 | 725 |
| 732 WebContentsDelegate* WebContentsImpl::GetDelegate() { | 726 WebContentsDelegate* WebContentsImpl::GetDelegate() { |
| 733 return delegate_; | 727 return delegate_; |
| 734 } | 728 } |
| 735 | 729 |
| 736 void WebContentsImpl::SetDelegate(WebContentsDelegate* delegate) { | 730 void WebContentsImpl::SetDelegate(WebContentsDelegate* delegate) { |
| 737 // TODO(cbentzel): remove this debugging code? | 731 // TODO(cbentzel): remove this debugging code? |
| 738 if (delegate == delegate_) | 732 if (delegate == delegate_) |
| 739 return; | 733 return; |
| (...skipping 208 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 948 | 942 |
| 949 // We make an exception for initial navigations. We only want to use the title | 943 // We make an exception for initial navigations. We only want to use the title |
| 950 // from the visible entry if: | 944 // from the visible entry if: |
| 951 // 1. The pending entry has been explicitly assigned a title to display. | 945 // 1. The pending entry has been explicitly assigned a title to display. |
| 952 // 2. The user is doing a history navigation in a new tab (e.g., Ctrl+Back), | 946 // 2. The user is doing a history navigation in a new tab (e.g., Ctrl+Back), |
| 953 // which case there is a pending entry index other than -1. | 947 // which case there is a pending entry index other than -1. |
| 954 // | 948 // |
| 955 // Otherwise, we want to stick with the last committed entry's title during | 949 // Otherwise, we want to stick with the last committed entry's title during |
| 956 // new navigations, which have pending entries at index -1 with no title. | 950 // new navigations, which have pending entries at index -1 with no title. |
| 957 if (controller_.IsInitialNavigation() && | 951 if (controller_.IsInitialNavigation() && |
| 958 ((controller_.GetVisibleEntry() && | 952 (!controller_.GetVisibleEntry()->GetTitle().empty() || |
| 959 !controller_.GetVisibleEntry()->GetTitle().empty()) || | |
| 960 controller_.GetPendingEntryIndex() != -1)) { | 953 controller_.GetPendingEntryIndex() != -1)) { |
| 961 entry = controller_.GetVisibleEntry(); | 954 entry = controller_.GetVisibleEntry(); |
| 962 } | 955 } |
| 963 | 956 |
| 964 if (entry) { | 957 // Return the empty string (not about:blank) for the initial blank page. |
| 965 return entry->GetTitleForDisplay(accept_languages); | 958 if (controller_.IsInitialNavigation() && |
| 966 } | 959 entry == controller_.GetLastCommittedEntry()) |
| 960 return entry->GetTitle(); |
| 967 | 961 |
| 968 // |page_title_when_no_navigation_entry_| is finally used | 962 return entry->GetTitleForDisplay(accept_languages); |
| 969 // if no title cannot be retrieved. | |
| 970 return page_title_when_no_navigation_entry_; | |
| 971 } | 963 } |
| 972 | 964 |
| 973 int32 WebContentsImpl::GetMaxPageID() { | 965 int32 WebContentsImpl::GetMaxPageID() { |
| 974 return GetMaxPageIDForSiteInstance(GetSiteInstance()); | 966 return GetMaxPageIDForSiteInstance(GetSiteInstance()); |
| 975 } | 967 } |
| 976 | 968 |
| 977 int32 WebContentsImpl::GetMaxPageIDForSiteInstance( | 969 int32 WebContentsImpl::GetMaxPageIDForSiteInstance( |
| 978 SiteInstance* site_instance) { | 970 SiteInstance* site_instance) { |
| 979 if (max_page_ids_.find(site_instance->GetId()) == max_page_ids_.end()) | 971 if (max_page_ids_.find(site_instance->GetId()) == max_page_ids_.end()) |
| 980 max_page_ids_[site_instance->GetId()] = -1; | 972 max_page_ids_[site_instance->GetId()] = -1; |
| (...skipping 364 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1345 | 1337 |
| 1346 // Either both routing ids can be given, or neither can be. | 1338 // Either both routing ids can be given, or neither can be. |
| 1347 DCHECK((params.routing_id == MSG_ROUTING_NONE && | 1339 DCHECK((params.routing_id == MSG_ROUTING_NONE && |
| 1348 params.main_frame_routing_id == MSG_ROUTING_NONE) || | 1340 params.main_frame_routing_id == MSG_ROUTING_NONE) || |
| 1349 (params.routing_id != MSG_ROUTING_NONE && | 1341 (params.routing_id != MSG_ROUTING_NONE && |
| 1350 params.main_frame_routing_id != MSG_ROUTING_NONE)); | 1342 params.main_frame_routing_id != MSG_ROUTING_NONE)); |
| 1351 GetRenderManager()->Init(params.browser_context, params.site_instance, | 1343 GetRenderManager()->Init(params.browser_context, params.site_instance, |
| 1352 params.routing_id, params.main_frame_routing_id, | 1344 params.routing_id, params.main_frame_routing_id, |
| 1353 MSG_ROUTING_NONE); | 1345 MSG_ROUTING_NONE); |
| 1354 frame_tree_.root()->SetFrameName(params.main_frame_name); | 1346 frame_tree_.root()->SetFrameName(params.main_frame_name); |
| 1347 controller_.Init(params.site_instance); |
| 1355 | 1348 |
| 1356 WebContentsViewDelegate* delegate = | 1349 WebContentsViewDelegate* delegate = |
| 1357 GetContentClient()->browser()->GetWebContentsViewDelegate(this); | 1350 GetContentClient()->browser()->GetWebContentsViewDelegate(this); |
| 1358 | 1351 |
| 1359 if (browser_plugin_guest_ && | 1352 if (browser_plugin_guest_ && |
| 1360 !BrowserPluginGuestMode::UseCrossProcessFramesForGuests()) { | 1353 !BrowserPluginGuestMode::UseCrossProcessFramesForGuests()) { |
| 1361 scoped_ptr<WebContentsView> platform_view(CreateWebContentsView( | 1354 scoped_ptr<WebContentsView> platform_view(CreateWebContentsView( |
| 1362 this, delegate, &render_view_host_delegate_view_)); | 1355 this, delegate, &render_view_host_delegate_view_)); |
| 1363 | 1356 |
| 1364 WebContentsViewGuest* rv = new WebContentsViewGuest( | 1357 WebContentsViewGuest* rv = new WebContentsViewGuest( |
| (...skipping 2148 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3513 // from CreateRenderView and allow that to notify the RenderView for us. | 3506 // from CreateRenderView and allow that to notify the RenderView for us. |
| 3514 int max_restored_page_id = controller_.GetMaxRestoredPageID(); | 3507 int max_restored_page_id = controller_.GetMaxRestoredPageID(); |
| 3515 if (max_restored_page_id > | 3508 if (max_restored_page_id > |
| 3516 GetMaxPageIDForSiteInstance(rvh->GetSiteInstance())) | 3509 GetMaxPageIDForSiteInstance(rvh->GetSiteInstance())) |
| 3517 UpdateMaxPageIDForSiteInstance(rvh->GetSiteInstance(), | 3510 UpdateMaxPageIDForSiteInstance(rvh->GetSiteInstance(), |
| 3518 max_restored_page_id); | 3511 max_restored_page_id); |
| 3519 } | 3512 } |
| 3520 | 3513 |
| 3521 bool WebContentsImpl::UpdateTitleForEntry(NavigationEntryImpl* entry, | 3514 bool WebContentsImpl::UpdateTitleForEntry(NavigationEntryImpl* entry, |
| 3522 const base::string16& title) { | 3515 const base::string16& title) { |
| 3516 DCHECK(entry); |
| 3517 |
| 3523 // For file URLs without a title, use the pathname instead. In the case of a | 3518 // For file URLs without a title, use the pathname instead. In the case of a |
| 3524 // synthesized title, we don't want the update to count toward the "one set | 3519 // synthesized title, we don't want the update to count toward the "one set |
| 3525 // per page of the title to history." | 3520 // per page of the title to history." |
| 3526 base::string16 final_title; | 3521 base::string16 final_title; |
| 3527 bool explicit_set; | 3522 bool explicit_set; |
| 3528 if (entry && entry->GetURL().SchemeIsFile() && title.empty()) { | 3523 if (entry && entry->GetURL().SchemeIsFile() && title.empty()) { |
| 3529 final_title = base::UTF8ToUTF16(entry->GetURL().ExtractFileName()); | 3524 final_title = base::UTF8ToUTF16(entry->GetURL().ExtractFileName()); |
| 3530 explicit_set = false; // Don't count synthetic titles toward the set limit. | 3525 explicit_set = false; // Don't count synthetic titles toward the set limit. |
| 3531 } else { | 3526 } else { |
| 3532 base::TrimWhitespace(title, base::TRIM_ALL, &final_title); | 3527 base::TrimWhitespace(title, base::TRIM_ALL, &final_title); |
| 3533 explicit_set = true; | 3528 explicit_set = true; |
| 3534 } | 3529 } |
| 3535 | 3530 |
| 3536 // If a page is created via window.open and never navigated, | 3531 if (final_title == entry->GetTitle()) |
| 3537 // there will be no navigation entry. In this situation, | 3532 return false; // Nothing changed, don't bother. |
| 3538 // |page_title_when_no_navigation_entry_| will be used for page title. | |
| 3539 if (entry) { | |
| 3540 if (final_title == entry->GetTitle()) | |
| 3541 return false; // Nothing changed, don't bother. | |
| 3542 | 3533 |
| 3543 entry->SetTitle(final_title); | 3534 entry->SetTitle(final_title); |
| 3544 } else { | |
| 3545 if (page_title_when_no_navigation_entry_ == final_title) | |
| 3546 return false; // Nothing changed, don't bother. | |
| 3547 | |
| 3548 page_title_when_no_navigation_entry_ = final_title; | |
| 3549 } | |
| 3550 | 3535 |
| 3551 // Lastly, set the title for the view. | 3536 // Lastly, set the title for the view. |
| 3552 view_->SetPageTitle(final_title); | 3537 view_->SetPageTitle(final_title); |
| 3553 | 3538 |
| 3554 FOR_EACH_OBSERVER(WebContentsObserver, observers_, | 3539 FOR_EACH_OBSERVER(WebContentsObserver, observers_, |
| 3555 TitleWasSet(entry, explicit_set)); | 3540 TitleWasSet(entry, explicit_set)); |
| 3556 | 3541 |
| 3557 return true; | 3542 return true; |
| 3558 } | 3543 } |
| 3559 | 3544 |
| (...skipping 1079 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4639 return NULL; | 4624 return NULL; |
| 4640 } | 4625 } |
| 4641 | 4626 |
| 4642 void WebContentsImpl::SetForceDisableOverscrollContent(bool force_disable) { | 4627 void WebContentsImpl::SetForceDisableOverscrollContent(bool force_disable) { |
| 4643 force_disable_overscroll_content_ = force_disable; | 4628 force_disable_overscroll_content_ = force_disable; |
| 4644 if (view_) | 4629 if (view_) |
| 4645 view_->SetOverscrollControllerEnabled(CanOverscrollContent()); | 4630 view_->SetOverscrollControllerEnabled(CanOverscrollContent()); |
| 4646 } | 4631 } |
| 4647 | 4632 |
| 4648 } // namespace content | 4633 } // namespace content |
| OLD | NEW |