| Index: chrome/browser/ui/search/instant_tab.cc
|
| diff --git a/chrome/browser/ui/search/instant_tab.cc b/chrome/browser/ui/search/instant_tab.cc
|
| index 3d8e792313fb2016119ac9d369737336cbe2b784..dea3f31c2427ca2e8dfff6ea8d108473bd6e264e 100644
|
| --- a/chrome/browser/ui/search/instant_tab.cc
|
| +++ b/chrome/browser/ui/search/instant_tab.cc
|
| @@ -1,23 +1,83 @@
|
| -// Copyright 2012 The Chromium Authors. All rights reserved.
|
| +// Copyright 2013 The Chromium Authors. All rights reserved.
|
| // Use of this source code is governed by a BSD-style license that can be
|
| // found in the LICENSE file.
|
|
|
| #include "chrome/browser/ui/search/instant_tab.h"
|
|
|
| -#include "chrome/browser/ui/webui/ntp/ntp_user_data_logger.h"
|
| +#include "chrome/browser/ui/search/search_model.h"
|
| +#include "chrome/browser/ui/search/search_tab_helper.h"
|
| +#include "chrome/common/url_constants.h"
|
| +#include "content/public/browser/render_frame_host.h"
|
| #include "content/public/browser/web_contents.h"
|
|
|
| -InstantTab::InstantTab(InstantPage::Delegate* delegate)
|
| - : InstantPage(delegate) {
|
| +InstantTab::Delegate::~Delegate() {
|
| }
|
|
|
| InstantTab::~InstantTab() {
|
| + if (web_contents()) {
|
| + SearchTabHelper::FromWebContents(web_contents())->model()->RemoveObserver(
|
| + this);
|
| + }
|
| }
|
|
|
| -void InstantTab::Init(content::WebContents* contents) {
|
| - SetContents(contents);
|
| +bool InstantTab::supports_instant() const {
|
| + return web_contents() &&
|
| + SearchTabHelper::FromWebContents(web_contents())->SupportsInstant();
|
| }
|
|
|
| -bool InstantTab::ShouldProcessAboutToNavigateMainFrame() {
|
| - return true;
|
| +bool InstantTab::IsLocal() const {
|
| + return web_contents() &&
|
| + web_contents()->GetURL() == GURL(chrome::kChromeSearchLocalNtpUrl);
|
| +}
|
| +
|
| +InstantTab::InstantTab(Delegate* delegate)
|
| + : delegate_(delegate) {
|
| +}
|
| +
|
| +void InstantTab::Init(content::WebContents* new_web_contents) {
|
| + ClearContents();
|
| +
|
| + if (!new_web_contents)
|
| + return;
|
| +
|
| + Observe(new_web_contents);
|
| + SearchModel* model =
|
| + SearchTabHelper::FromWebContents(web_contents())->model();
|
| + model->AddObserver(this);
|
| +
|
| + // Already know whether the page supports instant.
|
| + if (model->instant_support() != INSTANT_SUPPORT_UNKNOWN)
|
| + InstantSupportDetermined(model->instant_support() == INSTANT_SUPPORT_YES);
|
| +}
|
| +
|
| +void InstantTab::DidCommitProvisionalLoadForFrame(
|
| + content::RenderFrameHost* render_frame_host,
|
| + const GURL& url,
|
| + ui::PageTransition /* transition_type */) {
|
| + if (!render_frame_host->GetParent()) {
|
| + delegate_->InstantTabAboutToNavigateMainFrame(web_contents(), url);
|
| + }
|
| +}
|
| +
|
| +void InstantTab::ModelChanged(const SearchModel::State& old_state,
|
| + const SearchModel::State& new_state) {
|
| + if (old_state.instant_support != new_state.instant_support)
|
| + InstantSupportDetermined(new_state.instant_support == INSTANT_SUPPORT_YES);
|
| +}
|
| +
|
| +void InstantTab::InstantSupportDetermined(bool supports_instant) {
|
| + delegate_->InstantSupportDetermined(web_contents(), supports_instant);
|
| +
|
| + // If the page doesn't support Instant, stop listening to it.
|
| + if (!supports_instant)
|
| + ClearContents();
|
| +}
|
| +
|
| +void InstantTab::ClearContents() {
|
| + if (web_contents()) {
|
| + SearchTabHelper::FromWebContents(web_contents())->model()->RemoveObserver(
|
| + this);
|
| + }
|
| +
|
| + Observe(NULL);
|
| }
|
|
|