// Copyright (c) 2012 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/search_delegate.h"
#include "chrome/browser/ui/search/search_model.h"
#include "chrome/browser/ui/search/search_tab_helper.h"
SearchDelegate::SearchDelegate(SearchModel* browser_search_model)
: browser_model_(browser_search_model),
tab_model_() {
}
SearchDelegate::~SearchDelegate() {
DCHECK(!tab_model_) << "All tabs should have been deactivated or closed.";
}
void SearchDelegate::ModelChanged(const SearchModel::State& old_state,
const SearchModel::State& new_state) {
browser_model_->SetState(new_state);
}
void SearchDelegate::OnTabActivated(content::WebContents* web_contents) {
if (tab_model_)
tab_model_->RemoveObserver(this);
tab_model_ = SearchTabHelper::FromWebContents(web_contents)->model();
browser_model_->SetState(tab_model_->state());
tab_model_->AddObserver(this);
}
void SearchDelegate::OnTabDeactivated(content::WebContents* web_contents) {
StopObservingTab(web_contents);
}
void SearchDelegate::OnTabDetached(content::WebContents* web_contents) {
StopObservingTab(web_contents);
}
void SearchDelegate::StopObservingTab(content::WebContents* web_contents) {
SearchTabHelper* search_tab_helper =
SearchTabHelper::FromWebContents(web_contents);
if (search_tab_helper->model() == tab_model_) {
tab_model_->RemoveObserver(this);
tab_model_ = NULL;
}
}