| OLD | NEW |
| 1 // Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "chrome/browser/tab_contents/web_contents.h" | 5 #include "chrome/browser/tab_contents/web_contents.h" |
| 6 | 6 |
| 7 #include "base/command_line.h" | 7 #include "base/command_line.h" |
| 8 #include "base/compiler_specific.h" | 8 #include "base/compiler_specific.h" |
| 9 #include "base/file_version_info.h" | 9 #include "base/file_version_info.h" |
| 10 #include "base/process_util.h" | 10 #include "base/process_util.h" |
| (...skipping 345 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 356 return title; | 356 return title; |
| 357 } | 357 } |
| 358 return TabContents::GetTitle(); | 358 return TabContents::GetTitle(); |
| 359 } | 359 } |
| 360 | 360 |
| 361 SiteInstance* WebContents::GetSiteInstance() const { | 361 SiteInstance* WebContents::GetSiteInstance() const { |
| 362 return render_manager_.current_host()->site_instance(); | 362 return render_manager_.current_host()->site_instance(); |
| 363 } | 363 } |
| 364 | 364 |
| 365 bool WebContents::ShouldDisplayURL() { | 365 bool WebContents::ShouldDisplayURL() { |
| 366 if (controller()->GetPendingEntry()) { | 366 DOMUI* dom_ui = GetDOMUIForCurrentState(); |
| 367 // When there is a pending entry, that should determine whether the URL is | 367 if (dom_ui) |
| 368 // displayed (including getting the default behavior if the DOMUI doesn't | 368 return !dom_ui->should_hide_url(); |
| 369 // specify). | |
| 370 if (render_manager_.pending_dom_ui()) | |
| 371 return !render_manager_.pending_dom_ui()->should_hide_url(); | |
| 372 return true; | |
| 373 } | |
| 374 | |
| 375 if (render_manager_.dom_ui()) | |
| 376 return !render_manager_.dom_ui()->should_hide_url(); | |
| 377 return true; | 369 return true; |
| 378 } | 370 } |
| 379 | 371 |
| 380 bool WebContents::ShouldDisplayFavIcon() { | 372 bool WebContents::ShouldDisplayFavIcon() { |
| 381 if (controller()->GetPendingEntry()) { | 373 DOMUI* dom_ui = GetDOMUIForCurrentState(); |
| 382 // See ShouldDisplayURL. | 374 if (dom_ui) |
| 383 if (render_manager_.pending_dom_ui()) | 375 return !dom_ui->hide_favicon(); |
| 384 return !render_manager_.pending_dom_ui()->hide_favicon(); | |
| 385 return true; | |
| 386 } | |
| 387 | |
| 388 if (render_manager_.dom_ui()) | |
| 389 return !render_manager_.dom_ui()->hide_favicon(); | |
| 390 return true; | 376 return true; |
| 391 } | 377 } |
| 392 | 378 |
| 393 std::wstring WebContents::GetStatusText() const { | 379 std::wstring WebContents::GetStatusText() const { |
| 394 if (!is_loading() || load_state_ == net::LOAD_STATE_IDLE) | 380 if (!is_loading() || load_state_ == net::LOAD_STATE_IDLE) |
| 395 return std::wstring(); | 381 return std::wstring(); |
| 396 | 382 |
| 397 switch (load_state_) { | 383 switch (load_state_) { |
| 398 case net::LOAD_STATE_WAITING_FOR_CACHE: | 384 case net::LOAD_STATE_WAITING_FOR_CACHE: |
| 399 return l10n_util::GetString(IDS_LOAD_STATE_WAITING_FOR_CACHE); | 385 return l10n_util::GetString(IDS_LOAD_STATE_WAITING_FOR_CACHE); |
| (...skipping 125 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 525 // TODO(pkasting): http://b/1239839 Right now we purposefully don't call | 511 // TODO(pkasting): http://b/1239839 Right now we purposefully don't call |
| 526 // our superclass HideContents(), because some callers want to be very picky | 512 // our superclass HideContents(), because some callers want to be very picky |
| 527 // about the order in which these get called. In addition to making the code | 513 // about the order in which these get called. In addition to making the code |
| 528 // here practically impossible to understand, this also means we end up | 514 // here practically impossible to understand, this also means we end up |
| 529 // calling TabContents::WasHidden() twice if callers call both versions of | 515 // calling TabContents::WasHidden() twice if callers call both versions of |
| 530 // HideContents() on a WebContents. | 516 // HideContents() on a WebContents. |
| 531 WasHidden(); | 517 WasHidden(); |
| 532 } | 518 } |
| 533 | 519 |
| 534 bool WebContents::IsBookmarkBarAlwaysVisible() { | 520 bool WebContents::IsBookmarkBarAlwaysVisible() { |
| 535 // We want the bookmarks bar to go with the committed entry. This way, when | 521 // See GetDOMUIForCurrentState() comment for more info. This case is very |
| 536 // you're on the new tab page and navigate, the bookmarks bar doesn't | 522 // similar, but for non-first loads, we want to use the committed entry. This |
| 537 // disappear until the next load commits (the same time the page changes). | 523 // is so the bookmarks bar disappears at the same time the page does. |
| 538 if (!controller()->GetLastCommittedEntry()) { | 524 if (controller()->GetLastCommittedEntry()) { |
| 539 // However, when there is no committed entry (the first load of the tab), | 525 // Not the first load, always use the committed DOM UI. |
| 540 // then we fall back on the pending entry. This means that the bookmarks bar | 526 if (render_manager_.dom_ui()) |
| 541 // will be visible before the new tab page load commits. | 527 return render_manager_.dom_ui()->force_bookmark_bar_visible(); |
| 542 if (render_manager_.pending_dom_ui()) | 528 return false; // Default. |
| 543 return render_manager_.pending_dom_ui()->force_bookmark_bar_visible(); | |
| 544 return false; | |
| 545 } | 529 } |
| 546 | 530 |
| 531 // When it's the first load, we know either the pending one or the committed |
| 532 // one will have the DOM UI in it (see GetDOMUIForCurrentState), and only one |
| 533 // of them will be valid, so we can just check both. |
| 534 if (render_manager_.pending_dom_ui()) |
| 535 return render_manager_.pending_dom_ui()->force_bookmark_bar_visible(); |
| 547 if (render_manager_.dom_ui()) | 536 if (render_manager_.dom_ui()) |
| 548 return render_manager_.dom_ui()->force_bookmark_bar_visible(); | 537 return render_manager_.dom_ui()->force_bookmark_bar_visible(); |
| 549 return false; | 538 return false; // Default. |
| 550 } | 539 } |
| 551 | 540 |
| 552 void WebContents::SetDownloadShelfVisible(bool visible) { | 541 void WebContents::SetDownloadShelfVisible(bool visible) { |
| 553 TabContents::SetDownloadShelfVisible(visible); | 542 TabContents::SetDownloadShelfVisible(visible); |
| 554 if (visible) { | 543 if (visible) { |
| 555 // Always set this value as it reflects the last time the download shelf | 544 // Always set this value as it reflects the last time the download shelf |
| 556 // was made visible (even if it was already visible). | 545 // was made visible (even if it was already visible). |
| 557 last_download_shelf_show_ = TimeTicks::Now(); | 546 last_download_shelf_show_ = TimeTicks::Now(); |
| 558 } | 547 } |
| 559 } | 548 } |
| 560 | 549 |
| 561 void WebContents::PopupNotificationVisibilityChanged(bool visible) { | 550 void WebContents::PopupNotificationVisibilityChanged(bool visible) { |
| 562 render_view_host()->PopupNotificationVisibilityChanged(visible); | 551 render_view_host()->PopupNotificationVisibilityChanged(visible); |
| 563 } | 552 } |
| 564 | 553 |
| 565 bool WebContents::FocusLocationBarByDefault() { | 554 bool WebContents::FocusLocationBarByDefault() { |
| 566 // Allow the DOM UI to override the default. We use the pending DOM UI since | 555 DOMUI* dom_ui = GetDOMUIForCurrentState(); |
| 567 // that's what the user "just did" so should control what happens after they | 556 if (dom_ui) |
| 568 // did it. Using the committed one would mean when they navigate from a DOMUI | 557 return dom_ui->focus_location_bar_by_default(); |
| 569 // to a regular page, the location bar would be focused. | |
| 570 if (render_manager_.pending_dom_ui()) | |
| 571 return render_manager_.pending_dom_ui()->focus_location_bar_by_default(); | |
| 572 return false; | 558 return false; |
| 573 } | 559 } |
| 574 | 560 |
| 575 // Stupid view pass-throughs | 561 // Stupid view pass-throughs |
| 576 void WebContents::CreateView() { | 562 void WebContents::CreateView() { |
| 577 view_->CreateView(); | 563 view_->CreateView(); |
| 578 } | 564 } |
| 579 | 565 |
| 580 gfx::NativeView WebContents::GetNativeView() const { | 566 gfx::NativeView WebContents::GetNativeView() const { |
| 581 return view_->GetNativeView(); | 567 return view_->GetNativeView(); |
| (...skipping 1429 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2011 // The favicon url isn't valid. This means there really isn't a favicon, | 1997 // The favicon url isn't valid. This means there really isn't a favicon, |
| 2012 // or the favicon url wasn't obtained before the load started. This assumes | 1998 // or the favicon url wasn't obtained before the load started. This assumes |
| 2013 // the later. | 1999 // the later. |
| 2014 // TODO(sky): Need a way to set the favicon that doesn't involve generating | 2000 // TODO(sky): Need a way to set the favicon that doesn't involve generating |
| 2015 // its url. | 2001 // its url. |
| 2016 new_url->SetFavIconURL(TemplateURL::GenerateFaviconURL(params.referrer)); | 2002 new_url->SetFavIconURL(TemplateURL::GenerateFaviconURL(params.referrer)); |
| 2017 } | 2003 } |
| 2018 new_url->set_safe_for_autoreplace(true); | 2004 new_url->set_safe_for_autoreplace(true); |
| 2019 url_model->Add(new_url); | 2005 url_model->Add(new_url); |
| 2020 } | 2006 } |
| 2007 |
| 2008 DOMUI* WebContents::GetDOMUIForCurrentState() { |
| 2009 // When there is a pending navigation entry, we want to use the pending DOMUI |
| 2010 // that goes along with it to control the basic flags. For example, we want to |
| 2011 // show the pending URL in the URL bar, so we want the display_url flag to |
| 2012 // be from the pending entry. |
| 2013 // |
| 2014 // The confusion comes because there are multiple possibilities for the |
| 2015 // initial load in a tab as a side effect of the way the RenderViewHostManager |
| 2016 // works. |
| 2017 // |
| 2018 // - For the very first tab the load looks "normal". The new tab DOM UI is |
| 2019 // the pending one, and we want it to apply here. |
| 2020 // |
| 2021 // - For subsequent new tabs, they'll get a new SiteInstance which will then |
| 2022 // get switched to the one previously associated with the new tab pages. |
| 2023 // This switching will cause the manager to commit the RVH/DOMUI. So we'll |
| 2024 // have a committed DOM UI in this case. |
| 2025 // |
| 2026 // This condition handles all of these cases: |
| 2027 // |
| 2028 // - First load in first tab: no committed nav entry + pending nav entry + |
| 2029 // pending dom ui: |
| 2030 // -> Use pending DOM UI if any. |
| 2031 // |
| 2032 // - First load in second tab: no committed nav entry + pending nav entry + |
| 2033 // no pending DOM UI: |
| 2034 // -> Use the committed DOM UI if any. |
| 2035 // |
| 2036 // - Second navigation in any tab: committed nav entry + pending nav entry: |
| 2037 // -> Use pending DOM UI if any. |
| 2038 // |
| 2039 // - Normal state with no load: committed nav entry + no pending nav entry: |
| 2040 // -> Use committed DOM UI. |
| 2041 if (controller()->GetPendingEntry() && |
| 2042 (controller()->GetLastCommittedEntry() || |
| 2043 render_manager_.pending_dom_ui())) |
| 2044 return render_manager_.pending_dom_ui(); |
| 2045 return render_manager_.dom_ui(); |
| 2046 } |
| OLD | NEW |